DB2查询当前月数据异常:返回上月结果问题咨询
问题分析与修正方案
你的语句问题出在起始日期多减了1个月,同时结束日期的计算逻辑也指向了上个月,导致整个查询范围落到了上个月。我们以当前日期为9月15日为例拆解计算:
- 原起始日期计算:
CURRENT DATE - (DAY(CURRENT DATE)-1) DAYS原本能得到当月第一天(9月1日),但你额外减了1个月,最终变成了8月1日。 - 原结束日期计算:
CURRENT DATE - DAY(CURRENT DATE) DAYS是用当前日期减去当月已过天数,得到的是上个月最后一天(8月31日)。
两者结合,查询范围自然是上个月的数据,而非预期的当月。
修正后的查询语句
要获取当月1日到当月最后一天的数据,有两种写法可选:
方法1:使用LAST_DAY函数(推荐,更简洁)
AND LOG.CHGTS BETWEEN CURRENT DATE - (DAY(CURRENT DATE)-1) DAYS AND LAST_DAY(CURRENT DATE)
方法2:纯日期运算推导(适配不支持LAST_DAY的DB2版本)
AND LOG.CHGTS BETWEEN CURRENT DATE - (DAY(CURRENT DATE)-1) DAYS AND CURRENT DATE + (1 - DAY(CURRENT DATE)) DAYS + 1 MONTH - 1 DAY
验证逻辑(以9月15日为例)
- 起始日期:
CURRENT DATE - (15-1) DAYS→ 9月1日 - 结束日期(用
LAST_DAY):LAST_DAY('2024-09-15')→ 9月30日 - 最终范围就是9月1日到9月30日,完全符合预期。
内容的提问来源于stack exchange,提问作者user16750862
相关产品推荐
相关产品推荐

