×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.6.20. Функции и операторы диапазонов и мультидиапазонов

См. Раздел 2.5.17 для получения обзора типов диапазонов.

Таблица 2.6.56 перечислены специализированные операторы, доступные для типов диапазонов. Таблица 2.6.57 перечислены специализированные операторы, доступные для мультидиапазонных типов. В дополнение к ним обычные операторы сравнения, показанные в Таблица 2.6.1 доступны для типов диапазонов и мультидиапазонов. Операторы сравнения выполняют упорядочивание сначала по нижним границам диапазонов, и только при их равенстве сравниваются верхние границы. Операторы мультидиапазонов сравнивают каждый составляющий диапазон до выявления первого несовпадения. Как правило, это не позволяет получить полезный общий порядок, однако данные операторы предусмотрены для обеспечения возможности создания уникальных индексов для диапазонов.

Таблица 2.6.56. Операторы диапазонов

Оператор

Описание

Примеры

anyrange @> anyrangeboolean

Содержит ли первый диапазон второй?

int4range(2,4) @> int4range(2,3)t

anyrange @> anyelementboolean

Содержит ли диапазон указанный элемент?

'[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestampt

anyrange <@ anyrangeboolean

Содержится ли первый диапазон во втором?

int4range(2,4) <@ int4range(1,7)t

anyelement <@ anyrangeboolean

Содержится ли элемент в указанном диапазоне?

42 <@ int4range(1,7)f

anyrange && anyrangeboolean

Перекрываются ли диапазоны (имеют ли они общие элементы)?

int8range(3,7) && int8range(4,12)t

anyrange << anyrangeboolean

Расположен ли первый диапазон строго левее второго?

int8range(1,10) << int8range(100,110)t

anyrange >> anyrangeboolean

Расположен ли первый диапазон строго правее второго?

int8range(50,60) >> int8range(20,30)t

anyrange &< anyrangeboolean

Не выходит ли первый диапазон за правую границу второго?

int8range(1,20) &< int8range(18,20)t

anyrange &> anyrangeboolean

Не выходит ли первый диапазон за левую границу второго?

int8range(7,20) &> int8range(5,10)t

anyrange -|- anyrangeboolean

Являются ли данные диапазоны смежными?

numrange(1.1,2.2) -|- numrange(2.2,3.3)t

anyrange + anyrangeanyrange

Вычисляет объединение двух диапазонов. Диапазоны должны перекрываться или быть смежными, чтобы их объединение представляло собой единый диапазон (см. также см. range_merge()).

numrange(5,15) + numrange(10,20)[5,20)

anyrange * anyrangeanyrange

Вычисляет пересечение двух диапазонов.

int8range(5,15) * int8range(10,20)[10,15)

anyrange - anyrangeanyrange

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

int8range(5,15) - int8range(10,20)[5,10)


Таблица 2.6.57. Операторы мультидиапазонов

Оператор

Описание

Примеры

anymultirange @> anymultirangeboolean

Содержит ли первый мультидиапазон второй мультидиапазон?

'{[2,4)}'::int4multirange @> '{[2,3)}'::int4multiranget

anymultirange @> anyrangeboolean

Содержит ли мультидиапазон данный диапазон?

'{[2,4)}'::int4multirange @> int4range(2,3)t

anymultirange @> anyelementboolean

Содержит ли мультидиапазон данный элемент?

'{[2011-01-01,2011-03-01)}'::tsmultirange @> '2011-01-10'::timestampt

anyrange @> anymultirangeboolean

Содержит ли диапазон данный мультидиапазон?

'[2,4)'::int4range @> '{[2,3)}'::int4multiranget

anymultirange <@ anymultirangeboolean

Содержится ли первый мультидиапазон во втором мультидиапазоне?

'{[2,4)}'::int4multirange <@ '{[1,7)}'::int4multiranget

anymultirange <@ anyrangeboolean

Содержится ли мультидиапазон в диапазоне?

'{[2,4)}'::int4multirange <@ int4range(1,7)t

anyrange <@ anymultirangeboolean

Содержится ли диапазон в мультидиапазоне?

int4range(2,4) <@ '{[1,7)}'::int4multiranget

anyelement <@ anymultirangeboolean

Содержится ли элемент в мультидиапазоне?

4 <@ '{[1,7)}'::int4multiranget

anymultirange && anymultirangeboolean

Перекрываются ли мультидиапазоны (имеют ли они общие элементы)?

'{[3,7)}'::int8multirange && '{[4,12)}'::int8multiranget

anymultirange && anyrangeboolean

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

'{[3,7)}'::int8multirange && int8range(4,12)t

anyrange && anymultirangeboolean

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

int8range(3,7) && '{[4,12)}'::int8multiranget

anymultirange << anymultirangeboolean

Располагается ли первый мультидиапазон строго слева от второго?

'{[1,10)}'::int8multirange << '{[100,110)}'::int8multiranget

anymultirange << anyrangeboolean

Располагается ли мультидиапазон строго слева от диапазона?

'{[1,10)}'::int8multirange << int8range(100,110)t

anyrange << anymultirangeboolean

Располагается ли диапазон строго слева от мультидиапазона?

int8range(1,10) << '{[100,110)}'::int8multiranget

anymultirange >> anymultirangeboolean

Располагается ли первый мультидиапазон строго справа от второго?

'{[50,60)}'::int8multirange >> '{[20,30)}'::int8multiranget

anymultirange >> anyrangeboolean

Располагается ли мультидиапазон строго справа от диапазона?

'{[50,60)}'::int8multirange >> int8range(20,30)t

anyrange >> anymultirangeboolean

Располагается ли диапазон строго справа от мультидиапазона?

int8range(50,60) >> '{[20,30)}'::int8multiranget

anymultirange &< anymultirangeboolean

Не распространяется ли первый мультидиапазон вправо за пределы второго?

'{[1,20)}'::int8multirange &< '{[18,20)}'::int8multiranget

anymultirange &< anyrangeboolean

Не распространяется ли мультидиапазон вправо за пределы диапазона?

'{[1,20)}'::int8multirange &< int8range(18,20)t

anyrange &< anymultirangeboolean

Не распространяется ли диапазон вправо за пределы мультидиапазона?

int8range(1,20) &< '{[18,20)}'::int8multiranget

anymultirange &> anymultirangeboolean

Не распространяется ли первый мультидиапазон влево за пределы второго?

'{[7,20)}'::int8multirange &> '{[5,10)}'::int8multiranget

anymultirange &> anyrangeboolean

Не распространяется ли мультидиапазон влево за пределы диапазона?

'{[7,20)}'::int8multirange &> int8range(5,10)t

anyrange &> anymultirangeboolean

Не выходит ли диапазон за левую границу мультидиапазона?

int8range(7,20) &> '{[5,10)}'::int8multiranget

anymultirange -|- anymultirangeboolean

Являются ли мультидиапазоны смежными?

'{[1.1,2.2)}'::nummultirange -|- '{[2.2,3.3)}'::nummultiranget

anymultirange -|- anyrangeboolean

Является ли мультидиапазон смежным с диапазоном?

'{[1.1,2.2)}'::nummultirange -|- numrange(2.2,3.3)t

anyrange -|- anymultirangeboolean

Является ли диапазон смежным с мультидиапазоном?

numrange(1.1,2.2) -|- '{[2.2,3.3)}'::nummultiranget

anymultirange + anymultirangeanymultirange

Вычисляет объединение мультидиапазонов. Мультидиапазоны не обязательно должны перекрываться или быть смежными.

'{[5,10)}'::nummultirange + '{[15,20)}'::nummultirange{[5,10), [15,20)}

anymultirange * anymultirangeanymultirange

Вычисляет пересечение мультидиапазонов.

'{[5,15)}'::int8multirange * '{[10,20)}'::int8multirange{[10,15)}

anymultirange - anymultirangeanymultirange

Вычисляет разность мультидиапазонов.

'{[5,20)}'::int8multirange - '{[10,15)}'::int8multirange{[5,10), [15,20)}


Операторы «left-of» (находится слева), «right-of» (находится справа) и «adjacent» (граничит) всегда возвращают значение false, если в операции участвует пустой диапазон или мультидиапазон; то есть пустой диапазон не считается находящимся ни до, ни после любого другого диапазона.

В остальных случаях пустые диапазоны и мультидиапазоны рассматриваются как аддитивный нейтральный элемент: результатом объединения любого значения с пустым является само это значение. Результатом вычитания пустого значения из любого значения является само это значение. Пустой мультидиапазон состоит из тех же точек, что и пустой диапазон. Каждый диапазон содержит в себе пустой диапазон. Каждый мультидиапазон содержит любое количество пустых диапазонов.

Операторы объединения и разности диапазонов завершаются ошибкой, если результирующий диапазон должен содержать два несвязных поддиапазона, так как такой диапазон не может быть представлен. Для операций объединения и разности существуют отдельные операторы, которые принимают параметры типа multirange и возвращают мультидиапазон; они не вызывают ошибок, даже если их аргументы являются несвязными. Таким образом, если необходимо выполнить операцию объединения или разности для диапазонов, которые могут оказаться несвязными, ошибок можно избежать путем предварительного приведения типов range к типам multirange.

Таблица 2.6.58 описывает функции, доступные для использования с типами диапазонов range. Таблица 2.6.59 описывает функции, доступные для использования с типами мультидиапазонов multirange.

Таблица 2.6.58. Функции для работы с диапазонами

Функция

Описание

Примеры

lower ( anyrange ) → anyelement

Извлекает нижнюю границу диапазона (NULL если если диапазон пуст или не имеет нижней границы).

lower(numrange(1.1,2.2))1.1

upper ( anyrange ) → anyelement

Извлекает верхнюю границу диапазона (NULL если если диапазон пуст или не имеет верхней границы).

upper(numrange(1.1,2.2))2.2

isempty ( anyrange ) → boolean

Проверка диапазона на отсутствие элементов.

isempty(numrange(1.1,2.2))f

lower_inc ( anyrange ) → boolean

Является ли нижняя граница диапазона включающей?

lower_inc(numrange(1.1,2.2))t

upper_inc ( anyrange ) → boolean

Является ли верхняя граница диапазона включающей?

upper_inc(numrange(1.1,2.2))f

lower_inf ( anyrange ) → boolean

Проверка отсутствия нижней границы у диапазона (если нижняя граница равна -Infinity , возвращается значение false).

lower_inf('(,)'::daterange)t

upper_inf ( anyrange ) → boolean

Проверка отсутствия верхней границы у диапазона (если верхняя граница равна Infinity , возвращается значение false).

upper_inf('(,)'::daterange)t

range_merge ( anyrange, anyrange ) → anyrange

Вычисление наименьшего диапазона, включающего оба заданных диапазона.

range_merge('[1,2)'::int4range, '[3,4)'::int4range)[1,4)


Таблица 2.6.59. Функции мультидиапазонов

Функция

Описание

Примеры

lower ( anymultirange ) → anyelement

Извлечение нижней границы мультидиапазона (NULL если мультидиапазон пуст или не имеет нижней границы).

lower('{[1.1,2.2)}'::nummultirange)1.1

upper ( anymultirange ) → anyelement

Функция извлекает верхнюю границу мультидиапазона (NULL если мультидиапазон пуст или не имеет верхней границы).

upper('{[1.1,2.2)}'::nummultirange)2.2

isempty ( anymultirange ) → boolean

Проверка мультидиапазона на отсутствие элементов (пуст ли мультидиапазон)?

isempty('{[1.1,2.2)}'::nummultirange)f

lower_inc ( anymultirange ) → boolean

Является ли нижняя граница мультидиапазона включающей?

lower_inc('{[1.1,2.2)}'::nummultirange)t

upper_inc ( anymultirange ) → boolean

Является ли верхняя граница мультидиапазона включающей?

upper_inc('{[1.1,2.2)}'::nummultirange)f

lower_inf ( anymultirange ) → boolean

Проверка отсутствия нижней границы у мультидиапазона? (Нижняя граница -Infinity , возвращается значение false).

lower_inf('{(,)}'::datemultirange)t

upper_inf ( anymultirange ) → boolean

Проверка отсутствия верхней границы у мультидиапазона? (Верхняя граница Infinity , возвращается значение false).

upper_inf('{(,)}'::datemultirange)t

range_merge ( anymultirange ) → anyrange

Функция вычисляет минимальный диапазон, включающий в себя весь мультидиапазон.

range_merge('{[1,2), [3,4)}'::int4multirange)[1,4)

multirange ( anyrange ) → anymultirange

Функция возвращает мультидиапазон, содержащий только заданный диапазон.

multirange('[1,2)'::int4range){[1,2)}

unnest ( anymultirange ) → setof anyrange

Функция разворачивает мультидиапазон в набор диапазонов, расположенных в порядке возрастания.

unnest('{[1,2), [3,4)}'::int4multirange)

 [1,2)
 [3,4)


Функции, lower_inc, upper_inc, lower_inf, и upper_inf Все функции возвращают значение false для пустого диапазона или мультидиапазона.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению