我正在查询日期范围[start_date] - [end_date]是否重叠一个月。
到目前为止,我有:
select * from my table
where (start_date, end_date) overlaps ('2000-02-01', '2000-02-28')
我需要它来包含从月份开始但是进入月份的日期范围,或者从月份开始并进入下个月: 例如
'2000-01-31', '2000-02-01'
'2000-02-28', '2000-03-01'
但是这些不包含在查询结果中。
如果我能把月份的日期部分改为重叠('2000-02-01','2000-02-28')
那也很棒任何帮助表示赞赏
答案 0 :(得分:3)
您可以使用daterange
:
select *
from the_table
where daterange(start_date, end_date, '[]') && daterange(date '2000-02-01', date '2000-02-28', '[]')
参数'[]'
创建“包含”范围。这也适用于部分或多个月(甚至可以有效索引)
答案 1 :(得分:1)
我只是明确:
select t.*
from mytable t
where (start_date < '2000-02-01' and end_date >= '2000-02-01')
(end_date > '2000-02-28' and start_date <= '2000-02-28'