Отформатируйте строковый тип в формат даты и времени - PullRequest
1 голос
/ 25 июля 2011

У меня есть столбец (nvarchar), там есть datetime, но в виде строки. Я хочу изменить тип этого столбца на smalldatetime, но прежде чем я хочу отформатировать все строковые даты в один и тот же формат datetime. Но я не могу преуспеть в этом . Некоторые из них похожи на это «2007-07-10», некоторые из них обратны этому «02.07.2008». Как я могу изменить их в один формат, например, dd.mm.yyyy. (MS SQL Server 2008)

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Если у вас есть только эти 2 формата, это то, как вы можете это сделать.

Я предполагаю, что

'02 .07.2008 'имеет формат' dd.mm.yyyy '

'2007-07-10' имеет формат 'гггг-мм-дд'

Если у вас больше форматов, чем это, вы должны соответствующим образом изменить 'case' в предложении 'select'

declare @t table (a varchar(12))

insert @t values ('02.07.2008')
insert @t values ('2007-07-10')

select convert(date, a, case when charindex('-',a) = 5 then 21 else 103 end)
from @t

Вывод

2008-07-02
2007-07-10

Формат является стандартным для поля даты, но если вы хотите сохранить его как varchar, вы можете отформатировать его как dd.mm.yyyy следующим образомвместо этого.

select replace(convert(varchar, convert(date, a, case when charindex('-',a) = 5 
then 21 else 103 end), 103), '/', '.')
from @t

Вывод

02.07.2008
10.07.2007

Я должен указать, что вы всегда должны хранить дату как дату, а не как varchar в базе данных, когда это возможно.

2 голосов
/ 25 июля 2011

Вы не можете сделать это, если не знаете точный формат.

Подумайте о различных форматах - в некоторых странах месяц идет первым, а в других - день.Поэтому, если вы не знаете, означает ли 02.07.2008 2 июля или 7 февраля, вы не сможете выполнить свою задачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...