关于datetime:SQL Server 2008和毫秒

SQL Server 2008 and milliseconds

在SQL Server 2008中,为什么以下查询返回相同的值?

1
2
3
-- 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)

为什么下面的查询会转到第二天?

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


SQL Server中datetime的准确度始终为1/300s秒(3.33ms),因此任何不精确划分的值都将被舍入。

  • 997保持原样
  • 998将四舍五入到997
  • 999将四舍五入到000

为了获得更高的准确性,在SQL Server 2008以后的版本中提供了datetime2数据类型,可以精确到小数点后7位。


http://msdn.microsoft.com/en-us/library/ms187819.aspx say上的日期时间的msdn文档

Time range == 00:00:00 through 23:59:59.997
Accuracy == Rounded to increments of .000, .003, or .007 seconds

在链接文档中,还有一节"日期时间小数秒精度的舍入"。

日期时间2让您更准确。