★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

9.19. 範囲関数と演算子

範囲型の概要に関しては8.17を参照してください。

範囲型に対して利用可能な演算子を表 9.50に示します。

表9.50 範囲演算子

演算子説明結果
= 等しい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
+ 範囲の結合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-treeインデックスを付与するのに必要なため提供されています。

左に位置する/右に位置する/隣接する、の演算子は、範囲の一方が空の時は常に偽を返します。つまり、空の範囲に対しては、他のどの範囲の前後のどちらであるともみなされない、ということです。

結合範囲と差分範囲演算子は、もし得られる結果が互いに離れた2つの範囲を含む必要がある場合、このような範囲を表現することができないためエラーとなります。

範囲型に対して利用可能な関数を表 9.51に示します。

表9.51 範囲関数

関数戻り値型説明結果
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)

lowerupper関数は、範囲が空の場合および対象の境界が無限大の場合は、NULLを返します。 lower_incupper_inclower_inf、そしてupper_inf関数は、空の範囲に対しては全て偽を返します。