这是我的代码:
DECLARE @d1 DATETIME
DECLARE @d2 DATETIME
SET @d1 = '2015-01-01 00:00:00'
SET @d2 = '2015-12-31 23:59:59.999'
SELECT
CASE
WHEN ('2016-01-01 00:00:00' BETWEEN @d1 AND @d2)
THEN 'is between'
ELSE 'not between'
END AS BetweenOrNotBetween
我在此处提供的日期比该函数的范围晚1毫秒BETWEEN
,但是在我的SQL 2008 Server实例上,结果是“在...之间”而不是预期的“不在...之间” ...
这是一个错误,还是由于我看不见的某种原因而在设计中进行了必要的折衷?
是的,只要我在2016年1月1日午夜之后添加了不到一秒的时间,我就会得到预期的“不在中间”结果。
查看日期时间类型的文档。在本节中,Rounding of datetime Fractional Second Precision
您将找到问题的解释:
下表将datetime值四舍五入为.000,.003或.007秒。
这意味着如果您有1毫秒,则实际上将其舍入为0毫秒,因此结果为is between
。不幸的是,这是datetime
数据类型的工作方式,对此您无能为力,除非可以使用其他数据类型,例如datetime2
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句