Запрос с перекрытием дат Postgres - посмотрите, не перекрывают ли две даты диапазон в месяц - PullRequest
0 голосов
/ 05 июня 2018

Я делаю запрос, чтобы увидеть, перекрывают ли диапазон дат [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 голосов
/ 05 июня 2018

Вы можете использовать daterange:

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

Параметр '[]' создает «включающий» диапазон.Это также будет работать должным образом в течение нескольких месяцев или нескольких месяцев (и даже может быть эффективно проиндексировано)

0 голосов
/ 05 июня 2018

Я бы просто указал:

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...