9.20. Диапазонные/мультидиапазонные функции и операторы #
Диапазонные типы данных рассматриваются в Разделе 8.17.
В Таблице 9.56 показаны имеющиеся специальные операторы для диапазонных типов, а в Таблице 9.57 — для мультидиапазонных типов. Кроме них для диапазонов и мультидиапазонов определены обычные операторы сравнения, показанные в Таблице 9.1. Операторы сравнения сначала сравнивают нижние границы диапазонов, и только если они равны, сравнивают верхние границы. Операторы сравнения мультидиапазонов сравнивают каждый диапазон, пока не найдут неравенство. Такие операторы сравнения обычно не помогают получить полезный в целом вариант сортировки, но позволяют строить по диапазонам уникальные индексы.
Таблица 9.56. Диапазонные операторы
Оператор Описание Пример(ы) |
---|
Первый диапазон содержит второй?
|
Диапазон содержит заданный элемент?
|
Первый диапазон содержится во втором?
|
Заданный элемент содержится в диапазоне?
|
Диапазоны пересекаются (у них есть общие элементы)?
|
Первый диапазон располагается строго слева от второго?
|
Первый диапазон располагается строго справа от второго?
|
Первый диапазон не простирается правее второго?
|
Первый диапазон не простирается левее второго?
|
Диапазоны примыкают друг к другу?
|
Вычисляет объединение диапазонов. Диапазоны должны пересекаться или касаться друг друга, чтобы их объединением был один диапазон (но см.
|
Вычисляет пересечение диапазонов.
|
Вычисляет разность диапазонов. При этом второй диапазон, если он содержится в первом, должен располагаться так, чтобы в результате его вычитания получался один диапазон.
|
Таблица 9.57. Мультидиапазонные операторы
Оператор Описание Пример(ы) |
---|
Первый мультидиапазон содержит второй?
|
Мультидиапазон содержит заданный диапазон?
|
Мультидиапазон содержит заданный элемент?
|
Диапазон содержит заданный мультидиапазон?
|
Первый мультидиапазон содержится во втором?
|
Мультидиапазон содержится в диапазоне?
|
Диапазон содержится в мультидиапазоне?
|
Заданный элемент содержится в мультидиапазоне?
|
Мультидиапазоны пересекаются (у них есть общие элементы)?
|
Мультидиапазон пересекает заданный диапазон?
|
Диапазон пересекает заданный мультидиапазон?
|
Первый мультидиапазон располагается строго слева от второго?
|
Мультидиапазон располагается строго слева от заданного диапазона?
|
Диапазон располагается строго слева от заданного мультидиапазона?
|
Первый мультидиапазон располагается строго справа от второго?
|
Мультидиапазон располагается строго справа от заданного диапазона?
|
Диапазон располагается строго справа от заданного мультидиапазона?
|
Первый мультидиапазон не простирается правее второго?
|
Мультидиапазон не простирается правее заданного диапазона?
|
Диапазон не простирается правее заданного мультидиапазона?
|
Первый мультидиапазон не простирается левее второго?
|
Мультидиапазон не простирается левее заданного диапазона?
|
Диапазон не простирается левее заданного мультидиапазона?
|
Мультидиапазоны примыкают друг к другу?
|
Мультидиапазон примыкает к заданному диапазону?
|
Диапазон примыкает к заданному мультидиапазону?
|
Вычисляет объединение мультидиапазонов. Мультидиапазоны могут не пересекаться и не примыкать друг к другу.
|
Вычисляет пересечение мультидиапазонов.
|
Вычисляет разность мультидиапазонов.
|
Операторы слева/справа/примыкает всегда возвращают false, если один из диапазонов или мультидиапазонов пуст; то есть, считается, что пустой диапазон находится не слева и не справа от какого-либо другого диапазона.
В других случаях пустые диапазоны и мультидиапазоны рассматриваются как нулевой элемент: всё, что объединяется с пустым значением, остаётся неизменным. Все, от чего отнимается пустое значение, остаётся неизменным. Пустой мультидиапазон обладает теми же свойствами, что и пустой диапазон. Каждый диапазон содержит пустой диапазон. Каждый мультидиапазон содержит сколько угодно пустых диапазонов.
При вычислении операторов объединения и вычитания диапазонов возникнет ошибка, если в результате получатся два непересекающихся поддиапазона, поскольку такой результат нельзя представить в виде диапазона. Существуют отдельные операторы для объединения и вычитания, которые принимают мультидиапазонные параметры и возвращают мультидиапазон, и они не вызовут ошибку, даже если их аргументы не пересекаются. Поэтому, если вы хотите избежать ошибок при объединении или вычитании диапазонов, когда могут получиться непересекающиеся поддиапазоны, сначала преобразуйте входные диапазоны в мультидиапазоны.
В Таблице 9.55 перечислены функции, предназначенные для работы с диапазонными типами. Функции, предназначенные для использования с мультидиапазонными типами, приведены в Таблице 9.59.
Таблица 9.58. Диапазонные функции
Таблица 9.59. Мультидиапазонные функции
Если функциям lower_inc
, upper_inc
, lower_inf
, upper_inf
передаётся пустой диапазон или мультидиапазон, они возвращают false.