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

Функция

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

Спецификация
 
Синтаксические правила
  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);