关于sql server:在SQL中减去毫秒时出现意外结果

Unexpected results when subtracting milliseconds in SQL

本问题已经有最佳答案,请猛点这里访问。

我正在尝试在SQL中执行一些日期时间逻辑:

1
SET @DayEnd = DATEADD(MILLISECOND, -1, @BeginNextDay)

例如,如果@beginnextday是'2019-02-04 00:00:00.000',并且我正在执行上面的代码,那么@dayend应该是'2019-02-03 29:59:59:999'。不幸的是,情况并非如此,结果是"2019-02-04 00:00:00.000"。

当我减去12毫秒时,结果是'2019-02-03 23:59:59.987'。

当我减去10毫秒,结果如预期的那样是'2019-02-03 23:59:59.990'。

有人能给我解释一下SQL在做什么,这给了我这个(对我)意外的结果吗?


别这样!仅使用:

1
SET @DayEnd = @BeginNextDay;  -- if you even need this

把你的逻辑变成:

1
WHERE datecol < @DayEnd

而不是:

1
WHERE datecol <= @DayEnd  -- or equivalently using BETWEEN

不要用毫秒来定义时间段。使用>=<定义期间。