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

如何在SQL查询中自动使用当前日期对应的上一个10月1日?

自动获取上一个10月1日的PostgreSQL查询写法

直接用以下两种方式都可以实现自动获取当前日期对应的上一个10月1日,无需每年手动修改:

方法一:用CASE结合日期截断

SELECT *
FROM mytable
WHERE (start_date, end_date) OVERLAPS (
    CASE 
        WHEN EXTRACT(MONTH FROM CURRENT_DATE) >= 10 THEN 
            DATE_TRUNC('year', CURRENT_DATE)::DATE + INTERVAL '9 months'
        ELSE 
            DATE_TRUNC('year', CURRENT_DATE)::DATE - INTERVAL '3 months'
    END,
    CURRENT_DATE
);

逻辑说明:

  • 当当前月份≥10时,取当年的10月1日(DATE_TRUNC('year', CURRENT_DATE)得到当年1月1日,加9个月就是10月1日)
  • 当当前月份<10时,取去年的10月1日(当年1月1日减3个月,就是去年10月1日)

方法二:用MAKE_DATE函数(更直观)

SELECT *
FROM mytable
WHERE (start_date, end_date) OVERLAPS (
    MAKE_DATE(
        EXTRACT(YEAR FROM CURRENT_DATE)::INT - CASE WHEN EXTRACT(MONTH FROM CURRENT_DATE) < 10 THEN 1 ELSE 0 END,
        10,
        1
    ),
    CURRENT_DATE
);

逻辑说明:

  • 先计算目标年份:如果当前月份还没到10月,年份就减1;否则用当前年份
  • 用MAKE_DATE直接构造出10月1日的日期,语义更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:46:00