SQL Server中的日期时间行为异常

4
 declare @data datetime
 set @data = '2011-01-01 23:59:59:999'
 select @data  
 

结果为:

 2011-01-02 00:00:00.000

第二个例子:

 declare @data datetime
 set @data = '2011-01-01 23:59:59:999'
 select 1 where @data >= '2011-01-02 00:00:00:000'
 

结果

 1

我的问题是为什么出错以及如何正确解决?

编辑

问题出在 SQL Server 2008 中。


什么编程语言?什么数据库系统? - user647772
你想做什么?检查日期是否大于“2011-01-02 00:00:00.000”,如果是则返回1。 - Saeed
如果你没有看到任何问题,请不要发表任何评论。 - nirmus
2个回答

8

您遇到了精度问题。.999会被四舍五入为.000。

.997是离下一天最近的时间。

declare @data datetime
set @data = '2011-01-01T23:59:59.997'
select @data  

请看这里关于“舍入日期时间小数秒精度”的部分:http://msdn.microsoft.com/en-us/library/ms187819.aspx 如果你正在使用 SQL Server 2008,你可以使用datetime2(3)来获得毫秒级别的精度。

2

您需要使用更精确的格式 - datetime2 (YYYY-MM-DD HH:MM:SS:XXXXXXX)

 declare @data datetime2
 set @data = '2011-01-01 23:59:59:999'
 select 1 where @data >= '2011-01-02 00:00:00:000'

我不知道datetime2是什么。谢谢,这非常有帮助。 - nirmus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接