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

获取当前月份往前推5个月的全年度数据的SQL语句问题

解决SQL获取当前月份往前推5个月全年度数据的问题

你的原语句在当前月份≥5时有效,但月份<5时会得到负数,无法匹配AnniMonthNum(1-12的整数),导致查询失效。以下是两种可靠的解决方案:

方法1:使用DATEADD函数(推荐,直观不易出错)

直接计算当前日期往前推5个月的日期,再提取其月份,不管是否跨年都能得到正确的目标月份:

SELECT * 
FROM TABLE 
WHERE AnniMonthNum = MONTH(DATEADD(MONTH, -5, GETDATE()))

示例效果:

  • 当前是11月时,DATEADD(MONTH,-5,GETDATE())得到6月,匹配AnniMonthNum=6
  • 当前是3月时,DATEADD(MONTH,-5,GETDATE())得到去年10月,匹配AnniMonthNum=10

方法2:使用模运算(纯数学计算)

通过调整月份数值范围,用模运算处理负数情况,得到正确的目标月份:

SELECT * 
FROM TABLE 
WHERE AnniMonthNum = (MONTH(GETDATE()) - 5 - 1) % 12 + 1

计算逻辑:

  1. 将1-12的月份转为0-11的范围(减1)
  2. 减去5后做模12运算,确保结果落在0-11之间
  3. 再加1转回1-12的月份范围

两种方法都能匹配所有年度中目标月份的数据,无需额外过滤年份。

内容的提问来源于stack exchange,提问作者arsenaql

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:15:40