Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных.doc
Скачиваний:
160
Добавлен:
16.03.2016
Размер:
6 Мб
Скачать
☆

18.2.9. Предикат overlaps

Этот предикат служит для проверки перекрытия во времени двух событий. Условие определяется следующим синтаксисом:

overlaps_predicate ::= row_value_constructor OVERLAPS

row_value_constructor

Степень каждой из строк-операндов должна быть равна 2. Тип данных первого столбца каждого из операндов должен быть типом даты-времени, и типы данных первых столбцов должны быть совместимы. Тип данных второго столбца каждого из операндов должен быть типом даты-времени или интервала. При этом:

  • если это тип интервала, то точность типа должна быть такой, чтобы интервал можно было прибавить к значению типа дата-время первого столбца;

  • если это тип дата-время, то он должен быть совместим с типом данных дата-время первого столбца.

Пусть D1иD2– значения первого столбца первого и второго операндов соответственно. Если второй столбец первого операнда имеет тип дата-время, то пустьE1обозначает его значение. Если второй столбец первого операнда имеет типINTERVAL, то пустьI1– его значение, аE1 = D1 + I1. ЕслиD1является неопределенным значением или еслиE1 < D1, то пустьS1 = E1иT1 = D1. В противном случае, пустьS1 = D1иT1 = E1. Аналогично определяютсяS2иT2применительно ко второму операнду. Результат условия совпадает с результатом вычисления следующего булевского выражения:

(S1 > S2 AND NOT (S1 >= T2 AND T1 >= T2))

OR

(S2 > S1 AND NOT (S2 >= T1 AND T2 >= T1))

OR

(S1 = S2 AND (T1 <> T2 OR T1 = T2))

Примеры запросов с использованием предиката overlaps

Пример 18.19. Найти номера проектов, которые выполнялись в период с 15 января 2000 г. по 31 декабря 2002 г.

SELECT PRO_NO

FROM PRO

WHERE (PRO_SDATE, PRO_DURAT) OVERLAPS

(DATE '2000-01-15', DATE '2002-12-31');

Пример 18.20. Найти названия проектов, которые будут выполняться в течение следующего года.

SELECT PRO_TITLE

FROM PRO

WHERE (PRO_SDATE, PRO_DURAT) OVERLAPS

(CURRENT_DATE, INTERVAL '1' YEAR);

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

Этот предикат позволяет специфицировать квантифицированное сравнение строчного значения и определяется следующим синтаксическим правилом:

quantified_comparison_predicate ::= row_value_constructor

comp_op { ALL | SOME | ANY } query_expression

Степень первого операнда должна быть такой же, как и степень таблицы-результата выражения запросов. Типы данных значений строки-операнда должны быть совместимы с типами данных соответствующих столбцов выражения запроса. Сравнение строк производится по тем же правилам, что и для предиката сравнения.

Обозначим через xстроку-первый операнд, а черезS– результат вычисления выражения запроса. Пустьsобозначает произвольную строку таблицыS. Тогда:

  • условие x comp_op ALL Sимеет значениеtrueв том и только в том случае, когдаSпусто, или значение условияx comp_op sравноtrueдля каждой строкиs, входящей вS. Условиеx comp_op ALL Sимеет значениеfalseв том и только в том случае, когда значение предикатаx comp_op sравноfalseхотя бы для одной строкиs, входящей вS. В остальных случаях значение условияx comp_op ALL Sравноunknown;

  • условие x comp_op SOME Sимеет значениеfalseв том и только в том случае, когдаSпусто, или значение условияx comp_op sравноfalseдля каждой строкиs, входящей вS. Условиеx comp_op SOME Sимеет значениеtrueв том и только в том случае, когда значение предикатаx comp_op sравноtrueхотя бы для одной строкиs, входящей вS. В остальных случаях значение условияx comp_op SOME Sравноunknown;

  • условие x comp_op ANY S эквивалентно условию x comp_op SOME S.