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

Dar*_*ryn 3 sql postgresql

我正在查询日期范围 [start_date] - [end_date] 是否与一个月重叠。

到目前为止,我有:

select * from my table
where (start_date, end_date) overlaps ('2000-02-01', '2000-02-28')
Run Code Online (Sandbox Code Playgroud)

我需要它包含在月份之外开始但进入月份的日期范围,或者从月份开始并进入下个月:例如

'2000-01-31', '2000-02-01' '2000-02-28', '2000-03-01'

但是,这些未包含在查询结果中。

如果我可以只放置月份的日期部分而不是重叠('2000-02-01','2000-02-28')也很棒

任何帮助表示赞赏

a_h*_*ame 7

您可以使用daterange

select * 
from the_table
where daterange(start_date, end_date, '[]') && daterange(date '2000-02-01', date '2000-02-28', '[]')
Run Code Online (Sandbox Code Playgroud)

该参数'[]'创建一个“包含”范围。这也将在部分或几个月内正常工作(甚至可以有效地编制索引)