我有一个奇怪的问题。我使用以下
转换日期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
所以这似乎是错误的起源。现在快速查看结果集时没有看到任何错误。为什么不能制作适合一次的软件? :)
答案 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 )来保留毫秒数。