Предикат совмещения
Функция
Определение проверки совпадения во времени двух дат.
Спецификация
::=
::=
::=
Синтаксические правила
-
Количество
<значимых выражений>
в<проверяемой записи>
и<сличаемой записи>
должно быть равно 2. -
Тип данных первого столбца
<проверяемой записи>
и<сличаемой записи>
должен быть совместимым с типом даты-времени. -
Тип данных второго столбца
<проверяемой записи>
и<сличаемой записи>
должен быть типом даты-времени.
Общие правила
-
<Предикат совмещения>
возвращает TRUE, если интервал между датами<проверяемой записи>
попадает в интервал между датами в<сличаемой записи>
. В противном случае возвращается FALSE. -
Если одна из дат в
<проверяемой записи>
или<сличаемой записи>
имеет NULL-значение, результат предиката всегда FALSE.
Примеры
-
Найти номера проектов, которые выполнялись в период с 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|
-
select id from date_list dl1 where (date1,date2) not overlaps (select date1,date2 from date_list dl2 where dl1.id=dl2.id);