13

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

2 回答 2

29

SQL Server 中 DateTime 的精度始终为 1/300 秒 (3.33ms),因此任何不精确除的值都会被四舍五入。

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

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

于 2011-11-16T15:19:50.733 回答
4

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

时间范围 == 00:00:00 到 23:59:59.997 精度 == 以 0.000、0.003 或 0.007 秒为增量四舍五入

在链接的文档中还有一个“日期时间小数秒精度的舍入”部分。

datetime2为您提供更高的准确性。

于 2011-11-16T15:22:02.337 回答