Oracle SQL筛选当前年份及后续两个滚动年份的日期
Oracle SQL日期筛选解决方案
你的原SQL语句存在两个关键问题:
- 仅限制了年份的下限(大于等于当前年),没有设置上限,会包含所有未来年份的数据,不符合“仅保留之后两个滚动年份”的要求。
- 未指定起始日期为当前年份的1月1日,若当前日期处于年中,原语句会默认包含当前年的所有日期,但你明确要求从1月1日开始筛选。
根据你的需求(从当前年1月1日起,保留连续两年的日期,总计约730天),提供以下正确的SQL写法:
SELECT "date" FROM table1 WHERE "date" >= TRUNC(SYSDATE, 'YEAR') AND "date" < ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), 24);
语句解释:
TRUNC(SYSDATE, 'YEAR'):获取当前年份的1月1日(例如当前是2024年10月,该函数返回2024-01-01),确保筛选起始点符合要求。ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), 24):将当前年1月1日向后推24个月,得到两年后的1月1日。使用<而非<=,是为了确保筛选范围刚好是完整的两年(不包含两年后当天的日期),总时长约730天。- 用双引号包裹
"date":因为date是Oracle的保留关键字,避免语法冲突。
如果你的实际需求是覆盖当前年、下一年、下下年这三个完整年份(而非严格的两年时长),可以使用以下语句:
SELECT "date" FROM table1 WHERE "date" BETWEEN TRUNC(SYSDATE, 'YEAR') AND ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), 36) - INTERVAL '1' DAY;
内容的提问来源于stack exchange,提问作者J. Blue
相关产品推荐
相关产品推荐

