PostgreSQL中如何查询两个指定日期范围内的数据
PostgreSQL查询上一年指定日期区间的方案
思路评估
整体方向是对的,核心需求是先定位上一年的时间锚点再框定区间,只是具体写法不符合PostgreSQL的日期语法规则,不需要手动拼接1月1日的字符串,用内置的日期截断函数即可实现。
常用场景实现代码
场景1:查询上一整年(去年1月1日~去年12月31日)的数据
推荐用左闭右开的条件代替BETWEEN,避免漏判带时分秒的日期字段:
SELECT * FROM my_table WHERE date >= date_trunc('year', now() - INTERVAL '1 year') AND date < date_trunc('year', now());
说明:date_trunc('year', 时间值) 会自动将时间截断到对应年份的1月1日0点,比如当前是2024年,该函数取去年的时间锚点就会返回2023-01-01 00:00:00。
场景2:查询去年1月1日到去年某个固定月/日的数据
比如要取去年1月1日到去年10月5日的所有数据,直接在年初锚点基础上加时间偏移即可:
SELECT * FROM my_table WHERE date BETWEEN date_trunc('year', now() - INTERVAL '1 year') AND (date_trunc('year', now() - INTERVAL '1 year') + INTERVAL '9 months 4 days');
可根据需要调整INTERVAL后面的月、日数值匹配你要的截止日期。
场景3:查询去年1月1日到去年的今天的数据
如果截止日期是去年的当前月日,直接减1年即可:
SELECT * FROM my_table WHERE date BETWEEN date_trunc('year', now() - INTERVAL '1 year') AND (now()::DATE - INTERVAL '1 year');
内容的提问来源于stack exchange,提问作者Jenny C
相关产品推荐
相关产品推荐

