首页 > 解决方案 > 在 SQL 中减去毫秒时出现意外结果

问题描述

我正在尝试在 SQL 中执行一些 DateTime 逻辑:

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 正在做什么,这给了我这个(对我来说)意想不到的结果吗?

标签: sqlsql-server

解决方案


不要这样做!只需使用:

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

并将您的逻辑更改为:

WHERE datecol < @DayEnd

而不是:

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

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


推荐阅读