SQL Server 2008 and milliseconds
In SQL Server 2008, why do the following queries return the same value?
-- These all return 2011-01-01 23:59:59.997
SELECT CAST('2011-01-01 23:59:59.997' as datetime)
SELECT CAST('2011-01-01 23:59:59.998' as datetime)
And why does the following query round to the next day?
-- Returns 2011-01-02 00:00:00.000
SELECT CAST('2011-01-01 23:59:59.999' as datetime)
The accuracy of DateTime within SQL Server has always been to 1/300s of a second (3.33ms), so any value that does not divide precisely gets rounded.
To get additional accuracy, there is the DateTime2 data type, available in SQL Server 2008 onwards, that can be accurate to 7 decimal places.
The MSDN docs for datetime at http://msdn.microsoft.com/en-us/library/ms187819.aspx say
Time range == 00:00:00 through 23:59:59.997 Accuracy == Rounded to increments of .000, .003, or .007 seconds
In the linked document there is also a section "Rounding of datetime Fractional Second Precision".
datetime2 gives you more accuracy.
链接地址: http://www.djcxy.com/p/94400.html上一篇: 如何提高SQL Server中日期时间过滤的性能?
下一篇: SQL Server 2008和毫秒