SQL Server 2008:在nvarchar字段中存储日期

时间:2012-03-21 16:31:28

标签: sql-server-2008 date

我在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”格式?

2 个答案:

答案 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)