MSSQL:如何用int类型年月列筛选近5年数据?
解决int类型年月列筛选近5年数据的SQL方案
由于你的筛选列是int类型的YYYYMM格式,不用硬编码年份,直接通过动态计算当前日期对应的5年前年月数值来筛选即可,以下是主流数据库的实现方式:
SQL Server 实现
方法1:数值直接计算(推荐,性能最优)
直接通过年份和月份的数值运算得到5年前的YYYYMM整数,避免字符串转换:
SELECT * FROM your_table WHERE your_year_month_column >= (YEAR(GETDATE()) - 5) * 100 + MONTH(GETDATE())
方法2:日期函数转换
如果更习惯用日期函数处理,可以先把int年月转成日期,再和5年前的日期比较:
SELECT * FROM your_table WHERE DATEFROMPARTS(your_year_month_column / 100, your_year_month_column % 100, 1) >= DATEADD(YEAR, -5, GETDATE())
MySQL 实现
方法1:数值直接计算(推荐)
SELECT * FROM your_table WHERE your_year_month_column >= (YEAR(CURDATE()) - 5) * 100 + MONTH(CURDATE())
方法2:日期格式化转换
SELECT * FROM your_table WHERE your_year_month_column >= CAST(DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 YEAR), '%Y%m') AS UNSIGNED)
补充说明
你之前尝试dateadd、datefromparts失败,大概率是没把int类型的年月拆成年、月参数传给datefromparts,或者没正确构造对比的日期值。上面的方法已经帮你处理了类型转换和动态日期计算,不用手动写具体年份,每日运行都会自动计算当前时间对应的5年前范围。
内容的提问来源于stack exchange,提问作者Noobie
相关产品推荐
相关产品推荐

