SQL日期转换更改时间

时间:2011-01-10 12:59:21

标签: sql sql-server

我有一个奇怪的问题。我使用以下

转换日期
  

CONVERT(varchar(64),table。[Date],   120)AS the_date

现在,奇怪的是,如果我没有运行转换,那么时间就是2011-01-10 13:10:01,如果我运行转换,则时间将变为2011-01-10 13:10:02。怎么会这样?我只进行转换。

更新:该列是datetime列。我尝试使用121进行转换但问题相同。如果我在SQL Server Enterprise Manager中列出未转换的值与并排转换后的值,我会在这里和那里找到一行。似乎Enterprise Manager在输出它以供查看时也将其转换,因为如果我使用PHP获取数据并且不进行转换,我会看到该列保存为Jan 10 2011 3:31PM

更新:运行查询分析器我

2011-01-05 10:49:48.557    2011-01-05 10:49:48

所以这似乎是错误的起源。现在快速查看结果集时没有看到任何错误。为什么不能制作适合一次的软件? :)

5 个答案:

答案 0 :(得分:3)

此查询通过查询分析器或SSMS运行,返回预期值:

select CONVERT(varchar(64),CONVERT(datetime,'2010-01-01T10:59:31.997'),120),CONVERT(datetime,'2010-01-01T10:59:31.997')

2010-01-01 10:59:31 2010-01-01 10:59:31.997

通过企业管理器运行相同的产品:

2010-01-01 10:59:31 01/01/2010 10:59:32

也就是说,企业管理器已经将格式应用于datetime列,对输出进行舍入并隐藏毫秒。它不应该被任何信任。

答案 1 :(得分:2)

舍入。那里也可能有一毫秒的值。

答案 2 :(得分:0)

convert()是否缩短了时间?

这里有关于四舍五入的信息:http://msdn.microsoft.com/en-us/library/ms187928.aspx

答案 3 :(得分:0)

使用

显示问题
select table.[Date], CONVERT(varchar(64), table.[Date], 120) AS the_date from table

,这可能是转换问题

答案 4 :(得分:0)

使用CONVERT(varchar(64),[Date], 121 )来保留毫秒数。