我在SQL Server 2008上的数据库表中有一个公共字段。该字段的类型是nvarchar(255)。该字段包含来自应用程序的许多不同类型的值。
我目前需要将字段中的值从“2011年7月19日12:00 AM”格式转换为“2011-07-19 00:00:00.000”的格式。
我知道我可以使用语句
以查询格式返回SELECT CONVERT(datetime, value, 121)
FROM [Table]
where ...
这给了我一个我正在寻找的显示格式,但是当我尝试使用以下查询更新具有更正格式的表时,它会将其转换回“2011年7月19日12:00 AM”格式。
更新查询:
Update [Table]
set Value = CONVERT(datetime, t2.value, 121)
from [Table] t1
inner join
(SELECT ID, CONVERT(datetime, value, 121) as value
FROM [Table]) t2
on t2.ID = t1.ID
有没有办法强制目标nvarchar(255)字段维护转换中指定的“2011-07-19 00:00:00.000”格式?
答案 0 :(得分:0)
使用类似的东西,用日期字段更改getdate():
select cast(datepart(yyyy,getdate()) as char(4)) + '-'
+ replace(str(datepart(mm,getdate()),2),' ','0') + '-'
+ replace(str(datepart(dd,getdate()),2),' ','0') + ' '
+ replace(str(datepart(hh,getdate()),2),' ','0') + ':'
+ replace(str(datepart(mi,getdate()),2),' ','0') + ':'
+ replace(str(datepart(ss,getdate()),2),' ','0') + '.'
+ replace(str(datepart(ms,getdate()),3),' ','0')
您可以轻松找到获取此格式的功能。
在将问题标记为错误问题之前,请仔细阅读该问题。 “在nvarchar字段中存储日期”。这个男人想把一个日期作为“TEXT”存储在一个字段中,具有他想要的格式!请小心点。
答案 1 :(得分:0)
从外观上看,没有必要为更新进行自我加入。
这应该做你想要的:
update [Table]
set value = convert(nvarchar(23), convert(datetime, value, 100), 121)