9.19. Диапазонные функции и операторы

Диапазонные типы данных рассматриваются в Разд. 8.17.

В Табл. 9-47 показаны операторы, предназначенные для работы с диапазонами.

Таблица 9-47. Диапазонные операторы

ОператорОписаниеПримерРезультат
= равно int4range(1,5) = '[1,4]'::int4range t
<> не равно numrange(1.1,2.2) <> numrange(1.1,2.3) t
< меньше int4range(1,10) < int4range(2,3) t
> больше int4range(1,10) > int4range(1,5) t
<= меньше или равно numrange(1.1,2.2) <= numrange(1.1,2.2) t
>= больше или равно numrange(1.1,2.2) >= numrange(1.1,2.0) t
@> содержит диапазон int4range(2,4) @> int4range(2,3) t
@> содержит элемент '[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestamp t
<@ диапазон содержится в int4range(2,4) <@ int4range(1,7) t
<@ элемент содержится в 42 <@ int4range(1,7) f
&& пересекает (есть общие точки) int8range(3,7) && int8range(4,12) t
<< строго слева от int8range(1,10) << int8range(100,110) t
>> строго справа от int8range(50,60) >> int8range(20,30) t
&< не простирается правее int8range(1,20) &< int8range(18,20) t
&> не простирается левее int8range(7,20) &> int8range(5,10) t
-|- примыкает к numrange(1.1,2.2) -|- numrange(2.2,3.3) t
+ union numrange(5,15) + numrange(10,20) [5,20)
* пересечение int8range(5,15) * int8range(10,20) [10,15)
- вычитание int8range(5,15) - int8range(10,20) [5,10)

Простые операторы сравнения <, >, <= и >= сначала сравнивают нижние границы, и только если они равны, сравнивают верхние. Эти операторы сравнения обычно не очень полезны для диапазонов; основное их предназначение — сделать возможным построение индексов-B-деревьев по диапазонам.

Операторы слева/справа/примыкает всегда возвращают false, если один из диапазонов пуст; то есть, считается, что пустой диапазон находится не слева и не справа от какого-либо другого диапазона.

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

В Табл. 9-48 перечислены функции, предназначенные для работы с диапазонными типами.

Таблица 9-48. Диапазонные функции

ФункцияТип результатаОписаниеПримерРезультат
lower(anyrange) тип элемента диапазонанижняя граница диапазона lower(numrange(1.1, 2.2)) 1.1
upper(anyrange) тип элемента диапазонаверхняя граница диапазона upper(numrange(1.1, 2.2)) 2.2
isempty(anyrange) boolean диапазон пуст? isempty(numrange(1.1,2.2)) false
lower_inc(anyrange) boolean нижняя граница включается? lower_inc(numrange(1.1, 2.2)) true
upper_inc(anyrange) boolean верхняя граница включается? upper_inc(numrange(1.1, 2.2)) false
lower_inf(anyrange) boolean нижняя граница равна бесконечности? lower_inf('(,)'::daterange) true
upper_inf(anyrange) boolean верхняя граница равна бесконечности? upper_inf('(,)'::daterange) true
range_merge(anyrange, anyrange) anyrange наименьший диапазон, включающий оба заданных диапазона range_merge('[1,2)'::int4range, '[3,4)'::int4range) [1,4)

Функции lower и upper возвращают NULL, если диапазон пуст или указанная граница равна бесконечности. Если же пустой диапазон передаётся функциям lower_inc, upper_inc, lower_inf и upper_inf, все они возвращают false.