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让您更准确。