将字符串类型格式化为日期时间格式

时间:2011-07-24 21:23:37

标签: sql-server tsql datetime

我有一个列(nvarchar),那里有日期时间但是作为字符串。我想将该列的类型更改为smalldatetime但在我想将所有字符串日期格式化为相同的日期时间格式之前。但我不能成功他们中的一些人就像这个“2007-07-10”,其中一些是与“02.07.2008”相反的。如何将它们更改为一种格式,例如dd.mm.yyyy。 (ms sql server 2008)

2 个答案:

答案 0 :(得分:2)

除非您知道确切的格式,否则无法执行此操作。

考虑不同的格式 - 在某些国家/地区月份排在第一位,而在另一些国家/地区则是第一天。所以如果你不知道02.07.2008是指7月2日,还是2月7日,那么你就不可能完成任务。

答案 1 :(得分:2)

如果你只有这两种格式,你可以这样做。

我假设

'02 .07.2008'的格式为'dd.mm.yyyy'

'2007-07-10'的格式为'yyyy-mm-dd'

如果你有更多的格式,你必须相应改变'select'子句中的'case'

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。