如何用PostgreSQL查询上月5日至本月5日的日期集合
正确的PostgreSQL查询方案
你之前的查询问题在于,date_trunc('month', current_date-1)返回的是上月第一天,date_trunc('month', current_date)返回的是本月第一天,范围完全不符合你要的「上月5日至本月5日」需求,以下是两种可行的正确方案:
方案一:基于日期截断与间隔计算
SELECT "DATE" FROM Db_name WHERE "DATE" BETWEEN (date_trunc('month', current_date) - INTERVAL '1 month') + INTERVAL '4 days' AND (date_trunc('month', current_date) + INTERVAL '4 days');
逻辑说明:
date_trunc('month', current_date)获取当前月份的第一天(比如2022-08-16时为2022-08-01)- 减去1个月得到上月第一天,再加4天就得到上月5日
- 本月第一天加4天得到本月5日
方案二:使用make_date构造目标日期(可读性更强)
SELECT "DATE" FROM Db_name WHERE "DATE" BETWEEN make_date( extract(year from current_date - INTERVAL '1 month')::integer, extract(month from current_date - INTERVAL '1 month')::integer, 5 ) AND make_date( extract(year from current_date)::integer, extract(month from current_date)::integer, 5 );
逻辑说明:
- 通过
current_date - INTERVAL '1 month'定位到上月时间,提取年、月后用make_date直接构造上月5日 - 提取当前年、月,用
make_date构造本月5日
两种方案都能适配任意当前日期的场景,比如当前是2022-08-03时,依然会返回2022-07-05至2022-08-05的所有日期。
内容的提问来源于stack exchange,提问作者mrothniel
相关产品推荐
相关产品推荐

