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

如何过滤EXPIRATION_DATE字段值为近1年的数据库查询结果

常见数据库实现近1年日期过滤方案

核心逻辑:需要先把字符串格式存储的日期转为标准日期类型,再和当前日期减1年的计算值对比,避免字符串直接比较出现逻辑错误。不同数据库的实现语法如下:

  • Oracle
    Oracle原生支持DD-MON-RR格式的日期转换,语句示例:
SELECT * FROM 你的表名
WHERE TO_DATE(EXPIRATION_DATE, 'DD-MON-RR', 'NLS_DATE_LANGUAGE = AMERICAN') >= ADD_MONTHS(SYSDATE, -12);

指定NLS_DATE_LANGUAGE参数是为了避免数据库非英文环境下,月份缩写识别异常。

  • MySQL
SET lc_time_names = 'en_US';
SELECT * FROM 你的表名
WHERE STR_TO_DATE(EXPIRATION_DATE, '%d-%b-%y') >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR);

提前设置lc_time_names参数保证英文月份缩写可以正常识别。

  • PostgreSQL
SELECT * FROM 你的表名
WHERE TO_DATE(EXPIRATION_DATE, 'DD-MON-YY') >= CURRENT_DATE - INTERVAL '1 year';
  • SQL Server
SELECT * FROM 你的表名
WHERE CONVERT(DATE, EXPIRATION_DATE, 6) >= DATEADD(YEAR, -1, GETDATE());

注意:如果你的表数据量很大,直接对EXPIRATION_DATE字段做函数转换会导致无法命中该字段的普通索引,查询性能会受影响。这种场景建议优先把字段改为日期类型存储,或者建立对应转换逻辑的函数索引优化性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 21:09:02