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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:27:05