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

nir*_*mus 4 sql datetime sql-server-2008

 declare @data datetime
 set @data = '2011-01-01 23:59:59:999'
 select @data  
Run Code Online (Sandbox Code Playgroud)

结果是:

 2011-01-02 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

第二个例子:

 declare @data datetime
 set @data = '2011-01-01 23:59:59:999'
 select 1 where @data >= '2011-01-02 00:00:00:000'
Run Code Online (Sandbox Code Playgroud)

结果

 1
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么以及如何使其正确?

编辑

问题出在sql server 2008中

Mik*_*son 7

你有一个精确的问题..999向上舍入到.000.

.997尽可能接近第二天.

declare @data datetime
set @data = '2011-01-01T23:59:59.997'
select @data  
Run Code Online (Sandbox Code Playgroud)

请看这里关于"日期时间分数秒精度"的部分 http://msdn.microsoft.com/en-us/library/ms187819.aspx

如果您使用的是SQL Server 2008,则可以使用datetime2(3),如果您希望精度降至毫秒级.