如何在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
相关产品推荐
相关产品推荐

