PostgreSQL日期区间查询:如何获取2003年6月匹配的记录
查询PostgreSQL中包含指定月份的日期范围记录
看起来你需要筛选出日期范围覆盖2003年6月的记录,正好PostgreSQL的范围类型有专门的操作符可以轻松搞定这个需求!
首先确认下,你的Date列应该是PostgreSQL的daterange类型对吧?针对你的场景,有两种简单有效的查询方式:
方法1:利用范围重叠操作符&&
我们可以先构造出2003年6月的完整日期范围(左闭右开,和你表中的范围格式保持一致),然后判断记录的日期范围是否和这个月的范围有重叠:
SELECT ID, Date FROM your_table_name -- 记得替换成你的实际表名 WHERE Date && '[2003-06-01,2003-07-01)'::daterange;
方法2:利用范围包含操作符@>
如果只需要确认记录的范围包含2003年6月里的任意一天(比如当月第一天),可以用包含操作符,这样写更简洁:
SELECT ID, Date FROM your_table_name -- 替换成实际表名 WHERE Date @> '2003-06-01'::date;
这两种方法都会精准返回ID为5和6的记录,因为它们的日期范围[2000-01-01,2017-01-01)完全覆盖2003年6月,而其他记录的范围从2017年才开始,和2003年6月没有任何交集。
另外要注意,PostgreSQL的daterange默认是左闭右开的,所以我们构造的[2003-06-01,2003-07-01)正好代表整个6月的时间区间,和你表中的范围定义规则匹配,这样判断结果不会有偏差。
内容的提问来源于stack exchange,提问作者shahzad ise
相关产品推荐
相关产品推荐

