在查询中使用当前日期之前的 10 月 1 日

问题描述 投票:0回答:1

我目前查询数据是这样的:

SELECT *
   FROM mytable
  WHERE (start_date, end_date) OVERLAPS ('2023-10-01'::DATE, CURRENT_DATE);

问题是我每年都必须更新这个查询。有没有办法在查询中只使用当前日期的前 10 月 1 日?

postgresql
1个回答
0
投票

以下是如何获取最后一个特定月份(在您的问题中,您需要获取最后一个十月):

SELECT date_trunc('year', now()) + interval '9 month' 
       - (case when extract(month from current_date) < 10 then 1 else 0 end || ' year')::interval  
AS last_october;

今天 2024 年 1 月 7 日将会产生结果:

last_october
2023-10-01 00:00:00+00

所以您的查询将是:

SELECT *
FROM mytable
WHERE (start_date, end_date) OVERLAPS (
                               date_trunc('year', now()) + interval '9 month' 
                               - 
                               (case when extract(month from current_date) < 10 then 1 else 0 end || ' year')::interval 
                               , CURRENT_DATE
                             );

date_trunc('year', now()) + interval '9 month'
检索今年十月的第一天。之后,如果当前月份早于 10 月,则减去一年;如果月份为 10 月或之后,则维持当前年份。

演示在这里

© www.soinside.com 2019 - 2024. All rights reserved.