SQL Server 2008 and milliseconds

♀尐吖头ヾ 提交于 2019-11-30 08:58:07

问题


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)

回答1:


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.

  • 997 stays as it is
  • 998 will round to 997
  • 999 will round up to 000

To get additional accuracy, there is the DateTime2 data type, available in SQL Server 2008 onwards, that can be accurate to 7 decimal places.




回答2:


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.



来源:https://stackoverflow.com/questions/8153963/sql-server-2008-and-milliseconds

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!