SQL查询当前及过去3年数据的问题求助
解决SQL查询过去3年(含当前年)数据的问题
问题分析
你遇到的两个语句问题分别出在逻辑范围、运算符使用或字段类型适配上:
- 第一个语句
year(column) >= year(current_date()) -3:- 逻辑上如果当前是2025年,条件会包含2022-2025共4年的数据,但你只拿到当前年,大概率是
column并非日期/ datetime类型(比如是字符串),导致year()函数无法正确提取年份;另外你可能混淆了“过去3年”的范围——如果要的是当前年+前两年(共3年),应该用year(current_date()) -2而非-3。
- 逻辑上如果当前是2025年,条件会包含2022-2025共4年的数据,但你只拿到当前年,大概率是
- 第二个语句
column > current_date() - interval 3 year:- 用
>会排除3年前当天的数据,如果你需要包含那一天,应该改用>=;且这个逻辑是取“当前日期往前推3年的当天到现在”的数据,而非完整的3个年份。
- 用
正确语句示例
根据你实际需求选择对应的写法:
需求1:获取当前年及之前两年的所有数据(共3个完整年份)
比如2025年时,获取2023、2024、2025年的全部数据:
-- 方法1:通过日期范围锁定完整年份 SELECT * FROM table WHERE column >= DATE_FORMAT(CURRENT_DATE(), '%Y-01-01') - INTERVAL 2 YEAR AND column <= DATE_FORMAT(CURRENT_DATE(), '%Y-12-31'); -- 方法2:直接判断年份(需确保column是日期类型) SELECT * FROM table WHERE YEAR(column) BETWEEN YEAR(CURRENT_DATE()) - 2 AND YEAR(CURRENT_DATE());
需求2:获取当前日期往前推3年(含当天)到现在的数据
比如2025-05-10时,获取2022-05-10至2025-05-10的所有数据:
SELECT * FROM table WHERE column >= CURRENT_DATE() - INTERVAL 3 YEAR;
额外排查步骤
- 先确认
column的字段类型:如果是字符串,需先转换为日期类型再判断,比如MySQL用STR_TO_DATE(column, '%Y-%m-%d'),PostgreSQL用TO_DATE(column, 'YYYY-MM-DD')。 - 单独执行
SELECT YEAR(CURRENT_DATE()) -3;或SELECT CURRENT_DATE() - INTERVAL 3 YEAR;,验证返回值是否符合预期,再检查数据库中对应时间段是否存在数据。
内容的提问来源于stack exchange,提问作者user3602830
相关产品推荐
相关产品推荐

