Предикат совмещения

Функция

Определение проверки совпадения во времени двух дат.

Спецификация
 
Синтаксические правила
  1. Количество <​значимых выражений​> в <​проверяемой записи​> и <​сличаемой записи​> должно быть равно 2.

  2. Тип данных первого столбца <​проверяемой записи​> и <​сличаемой записи​> должен быть совместимым с типом даты-времени.

  3. Тип данных второго столбца <​проверяемой записи​> и <​сличаемой записи​> должен быть типом даты-времени.

Общие правила
  1. <​Предикат совмещения​> возвращает TRUE, если интервал между датами <​проверяемой записи​> попадает в интервал между датами в <​сличаемой записи​>. В противном случае возвращается FALSE.

  2. Если одна из дат в <​проверяемой записи​> или <​сличаемой записи​> имеет NULL-значение, результат предиката всегда FALSE.

Примеры
  1. Найти номера проектов, которые выполнялись в период с 15 января 2007 г. по 15 февраля 2007 г.:

    create or replace table pro (pro_no int, pro_name char(100),
      pro_sdate date, pro_edate date);
    insert into pro
      values (1, 'project_1', '01.02.2006', '01.12.2006');
    insert into pro
      values (2, 'project_2', '01.10.2006', '01.03.2007');
    insert into pro
      values (3, 'project_3', '01.02.2007', '01.05.2007');

    Эти три запроса идентичны:

    select pro_no from pro
     where (pro_sdate, pro_edate)
      overlaps ('15.01.2007', '15.02.2007');
    
    select pro_no from pro
     where (pro_sdate, pro_edate)
      overlaps (values ('15.01.2007', '15.02.2007'));
    
    select pro_no from pro
     where (pro_sdate, pro_edate)
      overlaps (select '15.01.2007', '15.02.2007');
    
     pro_no
     ------
    |          2|
    |          3|
  2. select id from date_list dl1
     where (date1,date2) not overlaps
      (select date1,date2 from date_list dl2 where dl1.id=dl2.id);