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