PostgreSQL查询当前日期起未来14天数据的正确SQL写法
问题原因
你编写的SQL存在核心逻辑错误,导致无法返回预期结果:
- 比较方向完全写反:
tanggal > current_date + (14 * interval '1' day)这个条件匹配的是晚于当前日期14天之后的所有记录,和你需要的「从当前日期开始未来14天内」的查询范围完全相反。 - 未设置范围下限:原语句没有限定日期不能早于当前日期,就算调整比较符号,也可能混入历史日期数据。
正确查询方案
根据你的字段属性(tanggal为日期类型),直接使用整数做日期加减执行效率更高,正确SQL如下:
SELECT * FROM tbl_product WHERE tanggal >= CURRENT_DATE AND tanggal <= CURRENT_DATE + 14;
如果tanggal是带时分秒的timestamp类型,为了避免边界时间的匹配误差,推荐用左闭右开的区间写法:
SELECT * FROM tbl_product WHERE tanggal >= CURRENT_DATE AND tanggal < CURRENT_DATE + INTERVAL '15 days';
写法说明:
CURRENT_DATE默认取当前日期的0点,< CURRENT_DATE + INTERVAL '15 days'可以完整覆盖当前日期到14天后23:59:59的所有数据,不会出现漏匹配、多匹配的问题。
以你给出的测试数据为例,如果当前日期为2022-06-14,查询范围为2022-06-14至2022-06-28,只会返回id=1的Item a记录;id=2的记录日期为2022-06-29超出14天范围,id=3为历史日期数据,均不会被返回,符合预期。
内容的提问来源于stack exchange,提问作者hellows
相关产品推荐
相关产品推荐

