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

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

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

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

ОператорОписаниеПримерРезультат
=равноint4range(1,5) = '[1,4]'::int4ranget
<>не равно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'::timestampt
<@диапазон содержится в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
+unionnumrange(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.