Postgres中如何实现当月首日到下月首日的动态日期筛选查询
Postgres动态筛选当月区间记录实现方案
核心逻辑
利用Postgres内置日期函数自动生成当月首日、下月首日,完全替换硬编码日期,适配定时调度场景无需手动修改。
适配不同字段类型的查询语句
场景1:createdate为日期/时间戳类型
直接使用日期类型比较,性能更优:
SELECT * FROM tbl WHERE tbl.createdate > date_trunc('month', CURRENT_DATE) AND tbl.createdate < date_trunc('month', CURRENT_DATE) + INTERVAL '1 month';
参数说明:
date_trunc('month', CURRENT_DATE):将当前日期截断至当月第一天,返回日期类型,例如当前为2021-11-15时返回2021-11-01date_trunc('month', CURRENT_DATE) + INTERVAL '1 month':自动计算下月第一天,支持自动跨年,例如当前为2021-12-03时返回2022-01-01
场景2:createdate为YYYYMMDD格式字符串类型
将动态生成的日期转为对应格式字符串匹配原有逻辑:
SELECT * FROM tbl WHERE tbl.createdate > to_char(date_trunc('month', CURRENT_DATE), 'YYYYMMDD') AND tbl.createdate < to_char(date_trunc('month', CURRENT_DATE) + INTERVAL '1 month', 'YYYYMMDD');
效果验证
完全匹配需求的动态日期规则:
- 11月执行时,条件自动变为
createdate > '20211101' and createdate < '20211201' - 12月执行时,条件自动变为
createdate > '20211201' and createdate < '20220101' - 所有跨年、跨月场景均自动适配,无需人工调整查询内容。
内容的提问来源于stack exchange,提问作者user17170756
相关产品推荐
相关产品推荐

