在SQL中减去毫秒的意外结果

时间:2019-04-12 10:53:26

标签: sql sql-server

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

1 个答案:

答案 0 :(得分:2)

不要这样做!只需使用:

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

并将您的逻辑更改为:

WHERE datecol < @DayEnd

而不是:

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

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