2011-11-16 65 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为您提供更高的准确性。