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

寻求替代INTERVAL '1' YEAR函数获取去年日期的方案

解决获取去年日期的SQL替代方案

首先,你原SQL里的IN是冗余的——CURRENT_DATE - INTERVAL '1' YEAR返回单个日期值,改用=更合理。针对INTERVAL语法失效的问题,给你几个替代方案:

方案1:使用数据库原生日期偏移函数

不同数据库有各自的日期偏移实现,挑适配你环境的用:

  • MySQL/MariaDB:DATE_SUB(CURRENT_DATE, INTERVAL 1 YEAR)
  • PostgreSQL:若原语法失效,可显式转换间隔类型 CURRENT_DATE - '1 year'::interval
  • SQL Server:DATEADD(year, -1, GETDATE())
  • Hive/Spark SQL:add_months(current_date(), -12)(比减365天更稳妥,自动处理闰年)

示例(以MySQL为例):

SELECT id, data_load_dt
FROM school_inventory 
WHERE date_parse(data_load_dt, '%Y-%m-%d') = DATE_SUB(CURRENT_DATE, INTERVAL 1 YEAR)

方案2:直接对字符串字段做年份计算

由于data_load_dt是%Y-%m-%d格式的字符串,可跳过日期转换,直接拼接出去年的同日期字符串匹配,性能更优:

SELECT id, data_load_dt
FROM school_inventory
WHERE data_load_dt = CONCAT(YEAR(CURRENT_DATE)-1, '-', LPAD(MONTH(CURRENT_DATE), 2, '0'), '-', LPAD(DAY(CURRENT_DATE), 2, '0'))

注:用LPAD是为了保证月份、日期是两位格式(比如1月转成01),和原字段格式匹配。

方案3:兼容日期转换后的匹配

如果必须保留date_parse转换步骤,换用兼容的日期偏移写法(以Hive为例):

SELECT id, data_load_dt
FROM school_inventory
WHERE date_parse(data_load_dt, '%Y-%m-%d') = add_months(current_date(), -12)

内容的提问来源于stack exchange,提问作者Crystal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:38:18