2011-11-16 44 views
12

在SQL Server 2008中,爲什麼以下查詢返回相同的值?SQL Server 2008和毫秒

-- 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) 

爲什麼下面的查詢到了第二天?

-- Returns 2011-01-02 00:00:00.000 
SELECT CAST('2011-01-01 23:59:59.999' as datetime) 

回答

25

SQL Server中DateTime的精確度一直都是1/300秒(3.33ms),所以任何不精確的值都會被四捨五入。

  • 997只停留,因爲它是
  • 998將舍入到997
  • 999將四捨五入到000

爲了獲得額外的精度,有DATETIME2數據類型,在SQL Server中可用2008年起,這可以精確到小數點後7位。

+0

很高興知道......感謝您的及時回覆! –

3

MSDN文檔的日期時間在http://msdn.microsoft.com/en-us/library/ms187819.aspx

時間範圍== 00:00:00通過23:59:59.997 精度==四捨五入到.000增量,0.003,0.007或秒

在鏈接的文檔中還有一個「舍入日期時間小數第二精度」部分。

datetime2爲您提供更高的準確性。