SQL Server中如何提取yyyymm格式年月字段的最近12个月数据
SQL Server查询yyyymm格式整数月份最近12个月数据的方案
你的monthid为存储yyyymm格式的整数字段,以下提供两种常用实现方案:
方案1:日期转换对比(逻辑直观易维护)
无需提前计算月份阈值,直接把monthid转换为日期格式和系统时间对比,适合小数据量、对性能要求不高的场景:
SELECT [年月标识], [属性值] FROM 替换为你的实际表名 WHERE -- 将int类型的monthid转为当月第一天的日期 CONVERT(DATE, CONVERT(VARCHAR(6), monthid) + '01', 112) >= -- 计算12个月前的当月第一天,避免当前日期的日部分导致筛选误差 DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 12, 0)
方案2:纯数值对比(性能更优)
不需要对表字段做函数转换,可以命中monthid字段上的索引,适合大数据量场景:
-- 声明变量计算起止月份阈值 DECLARE @StartMonth INT = CONVERT(VARCHAR(6), DATEADD(MONTH, -12, GETDATE()), 112); DECLARE @EndMonth INT = CONVERT(VARCHAR(6), GETDATE(), 112); SELECT [年月标识], [属性值] FROM 替换为你的实际表名 WHERE monthid BETWEEN @StartMonth AND @EndMonth;
注意事项
- 以上方案默认是包含当前月份的最近12个月数据,如果需要排除当前月份,把
DATEADD(MONTH, -12, GETDATE())调整为DATEADD(MONTH, -13, GETDATE()),结束月份改为CONVERT(VARCHAR(6), DATEADD(MONTH, -1, GETDATE()), 112)即可 - 如果你的表字段名和示例不同,同步替换SQL中的字段名即可
内容的提问来源于stack exchange,提问作者Sai
相关产品推荐
相关产品推荐

