Postgres重叠日期查询 - 查看两个日期作为范围是否重叠一个月

时间:2018-06-05 13:10:45

标签: sql postgresql

我正在查询日期范围[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')

那也很棒

任何帮助表示赞赏

2 个答案:

答案 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'