sql - 在 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 正在做什么,这给了我这个(对我来说)意想不到的结果吗?
解决方案
不要这样做!只需使用:
SET @DayEnd = @BeginNextDay; -- if you even need this
并将您的逻辑更改为:
WHERE datecol < @DayEnd
而不是:
WHERE datecol <= @DayEnd -- or equivalently using BETWEEN
不要摆弄毫秒来定义时间段。使用>=
和<
定义期间。
推荐阅读
- kubernetes - Kuberenetes 可用的时间表
- java - 过程参数(JDBC EDB)
- .net - Serilog 不从 json 获取控制台配置
- groovy - Proc Groovy 将较大的 XML 解析为 SAS
- pgadmin - 从 pgadmin 4.30 降级到 4.29 的问题
- oracle - 从声明块中获取结果集
- javascript - WebAudio 没有提供任何音频输出
- google-sheets - 如何计算列的平均值,然后将其包含在选择查询 Google 表格中,限制结果并过滤结果
- python - ModuleNotFoundError:没有名为“GPIO”的模块
- c - 如何使用结构指针和指定初始化来初始化 C 结构