Предикат совмещения
Функция
Определение проверки совпадения во времени двух дат.
Спецификация
::=
::=
::=
Синтаксические правила
-
Количество
< значимых выражений >
в< проверяемой записи >
и< сличаемой записи >
должно быть равно 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);