我目前查询数据是这样的:
SELECT *
FROM mytable
WHERE (start_date, end_date) OVERLAPS ('2023-10-01'::DATE, CURRENT_DATE);
问题是我每年都必须更新这个查询。有没有办法在查询中只使用当前日期的前 10 月 1 日?
以下是如何获取最后一个特定月份(在您的问题中,您需要获取最后一个十月):
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 月或之后,则维持当前年份。