Введение в стандарты языка баз данных SQL

Предикат overlaps


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

<overlaps predicate> ::= <row value constructor 1> OVERLAPS <row value constructor 2> <row value constructor 1> ::= <row value constructor> <row value constructor 2> ::= <row value constructor>

Пояснения:

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

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

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

  • Пусть D1 и D2 обозначают значения первого столбца первого и второго операндов соответственно.
  • Если второй столбец первого операнда имеет тип дата-время, то пусть E1 обозначает его значение.
  • Если второй столбец первого операнда имеет тип INTERVAL, то пусть I1 обозначает его значение, а E1 = D1 + I1.
  • Если D1 - неопределенное значение или если E1 < D1, то пусть S1 = E1 и T1 = D1. Иначе, пусть S1 = D1 и T1 = E1.
  • Аналогично определяются S2 и T2 применительно ко второму операнду.
  • Результат условия совпадает с результатом вычисления следующего выражения:
  • (S1 > S2 ANDNOT (S1 >= T2 ANDT1 >= T2)) OR (S2 > S1 ANDNOT (S2 >= T1 ANDT2 >= T1)) OR (S1 = S2 AND (T1 <> T2 ORT1 = T2))



    Содержание раздела