SQL Server 2008 BETWEEN函数

史蒂夫·L

这是我的代码:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章