WHERE子句中双日期条件写法的可行性与长期效果咨询
SQL日期筛选逻辑解答
你的查询语句中,两个REPORT_DATE >=条件用AND连接,实际生效的是两个日期里更晚的那个——因为只有同时满足大于等于两个日期的数据才会被选中,相当于取两者的最大值作为筛选起点。
当前(比如2023年6月)的情况
DATEADD(month, -12, CONVERT(DATE, GETDATE()))会得到2022年6月的某一天,而你指定的固定日期是2022-11-01,后者更晚,所以筛选起点是2022-11-01,返回2022年11月至今的数据,符合你的需求。
2023年12月时的情况
当时间来到2023年12月,DATEADD(month, -12, CONVERT(DATE, GETDATE()))会计算出2022年12月的当前日期,这个日期比固定的2022-11-01晚,此时筛选起点自动切换为这个动态计算的日期,返回的就是过去12个月的数据(从2022年12月到2023年12月),完全满足你“无需修改语句”的要求。
小优化建议
你可以把两个条件合并成一个更清晰的写法,逻辑完全一致:
SELECT * FROM Table WHERE REPORT_DATE >= GREATEST('2022-11-01', DATEADD(month, -12, CONVERT(DATE, GETDATE())))
内容的提问来源于stack exchange,提问作者JPSeagull
相关产品推荐
相关产品推荐

