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