SQL Server中奇怪的日期时间行为

 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


你有一个精确的问题。 .999被四舍五入至.000。

.997接近第二天,因为你可以得到。

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

在这里看看有关“日期时间分数秒精度的舍入”部分http://msdn.microsoft.com/zh-cn/library/ms187819.aspx

如果你在SQL Server 2008上,你可以使用datetime2(3),如果你想精确到毫秒。


您需要使用更精确的格式 - 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'
链接地址: http://www.djcxy.com/p/94397.html

上一篇: Strange datetime behavior in SQL Server

下一篇: How to select date without time in SQL