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

Oracle查询:如何获取upd_ts近两年内的记录?ADD_MONTHS()是否适用?

嘿,我来帮你一步步解决这些问题:

1. 检索upd_ts早于两年前的记录

如果你的数据库支持ADD_MONTHS()(比如Oracle),可以这样写:

SELECT *
FROM your_table
WHERE upd_ts < ADD_MONTHS(SYSDATE, -24);

要是用其他数据库(比如MySQL),可以用DATE_ADD替代:

SELECT *
FROM your_table
WHERE upd_ts < DATE_ADD(NOW(), INTERVAL -2 YEAR);

核心逻辑就是获取当前日期往前推24个月的时间点,然后筛选早于这个时间的记录。

2. 获取upd_ts在近两年内的记录

只需要把上面的条件改成大于等于那个时间点就行:
Oracle版本:

SELECT *
FROM your_table
WHERE upd_ts >= ADD_MONTHS(SYSDATE, -24);

MySQL版本:

SELECT *
FROM your_table
WHERE upd_ts >= DATE_ADD(NOW(), INTERVAL -2 YEAR);

如果要更严谨(比如排除可能存在的未来时间记录),可以加上上限:

WHERE upd_ts BETWEEN ADD_MONTHS(SYSDATE, -24) AND SYSDATE;
3. 使用ADD_MONTHS()是否为合适的实现方案?

非常合适!尤其是在处理跨月份、闰年这类场景时,ADD_MONTHS()比直接用日期加减更准确:

  • 比如今天是2024-03-31,往前推24个月是2022-03-31,ADD_MONTHS会自动处理每个月的天数差异;
  • 要是用SYSDATE - 730(按一年365天算),遇到闰年就会差一天,精度不够。

不过要注意:ADD_MONTHS()是Oracle、DB2等数据库的专属函数,如果你用的是PostgreSQL、MySQL,得用对应的替代方法(比如PostgreSQL用CURRENT_DATE - INTERVAL '2 years',MySQL用DATE_ADD),但按月份偏移的逻辑是通用且可靠的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:30:20