You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询WHERE子句使用日期范围时结果集缺失正确日期问题求助

问题根因

你遇到的9月30日数据缺失,核心是datetime类型的时间精度匹配问题:

  • EOMONTH() 函数返回的日期默认时间为00:00:00.000,例如查询9月最后一天时,返回值为2024-09-30 00:00:00.000
  • 你的TA_DUE_DATE字段带有时分秒属性,9月30日0点之后产生的所有数据(例如2024-09-30 08:12:33)都会大于这个返回值,所以被<= EOMONTH(@date2)条件过滤掉。

修复方案

推荐使用半开区间日期写法,无需考虑时间精度问题,也可以简化你原有变量逻辑:

  1. 直接删除原有@date1、@date2变量声明赋值逻辑,你设置的getdate()-15逻辑可以被更稳定的日期函数替代,只要查询是在当月前15天运行,以下条件可以稳定取到上月全量数据
  2. 将WHERE子句中的日期过滤条件替换为:
A.TA_DUE_DATE >= DATEADD(DAY, 1, EOMONTH(GETDATE(), -2)) 
AND A.TA_DUE_DATE < DATEADD(DAY, 1, EOMONTH(GETDATE(), -1))

逻辑说明

  • DATEADD(DAY, 1, EOMONTH(GETDATE(), -2)):计算上上月最后一天加1天,即上月第一天0点
  • DATEADD(DAY, 1, EOMONTH(GETDATE(), -1)):计算上月最后一天加1天,即当月第一天0点
    所有上月的时间数据(哪怕是上月最后一天23:59:59.999)都会小于当月第一天0点,不会出现边缘数据漏匹配的问题,兼容性比<=写法更好。

额外校验点

如果修改后仍有问题,可以检查两个字段的一致性:你SELECT输出的是TA_DUE_DATEUTC(UTC时区日期),但WHERE过滤用的是TA_DUE_DATE,如果两个字段时区不统一,也可能出现日期匹配偏差。

内容的提问来源于stack exchange,提问作者Nick Singh Sahota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:45:06