这是因为 DATETIME 数据类型的准确性,它具有准确性 ( quote):
舍入到 .000、.003 或 0.007 秒的增量
所以是的,在某些情况下您必须小心(例如,23:59:59.999 将向上舍入到第二天的 00:00,23:59:59.998 将向下舍入到 23:59:59.997)
SELECT CAST('2010-08-27T23:59:59.997' AS DATETIME)
SELECT CAST('2010-08-27T23:59:59.998' AS DATETIME)
SELECT CAST('2010-08-27T23:59:59.999' AS DATETIME)
从 sql Server 2008 开始,有一种新的DATETIME2数据类型,可提供低至 100 纳秒的更高准确度。
当我对包含时间元素的 DATETIME 字段进行查询时,出于这个原因,我不使用 BETWEEN。
例如我更喜欢
WHERE DateField >= '2010-08-27' AND DateField < '2010-08-28'
代替:
WHERE DateField BETWEEN '2010-08-27' AND '2010-08-27T23:59:59.997'