获取当前月份往前推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-12的月份转为0-11的范围(减1)
- 减去5后做模12运算,确保结果落在0-11之间
- 再加1转回1-12的月份范围
两种方法都能匹配所有年度中目标月份的数据,无需额外过滤年份。
内容的提问来源于stack exchange,提问作者arsenaql
相关产品推荐
相关产品推荐

