PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 10.23 » Langage SQL » Fonctions et opérateurs » Fonctions et opérateurs sur les données de type range

9.19. Fonctions et opérateurs sur les données de type range

Voir Section 8.17 pour un aperçu des types range.

Tableau 9.50 montre les opérateurs disponibles pour les types range.

Tableau 9.50. Opérateurs pour les types range

OpérateurDescriptionExempleRésultat
= égalint4range(1,5) = '[1,4]'::int4ranget
<> différentnumrange(1.1,2.2) <> numrange(1.1,2.3)t
< plus petit queint4range(1,10) < int4range(2,3)t
> plus grand queint4range(1,10) > int4range(1,5)t
<= plus petit ou égalnumrange(1.1,2.2) <= numrange(1.1,2.2)t
>= plus grand ou égalnumrange(1.1,2.2) >= numrange(1.1,2.0)t
@> contientint4range(2,4) @> int4range(2,3)t
@> contient l'élément'[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestampt
<@ contenu parint4range(2,4) <@ int4range(1,7)t
<@ l'élément est contenu par42 <@ int4range(1,7)f
&& surcharge (ont des points en commun)int8range(3,7) && int8range(4,12)t
<< strictement à la gauche deint8range(1,10) << int8range(100,110)t
>> strictement à la droite deint8range(50,60) >> int8range(20,30)t
&< ne s'étend pas à droite deint8range(1,20) &< int8range(18,20)t
&> ne s'étend pas à gauche deint8range(7,20) &> int8range(5,10)t
-|- est adjacent ànumrange(1.1,2.2) -|- numrange(2.2,3.3)t
+ unionnumrange(5,15) + numrange(10,20)[5,20)
* intersectionint8range(5,15) * int8range(10,20)[10,15)
- différenceint8range(5,15) - int8range(10,20)[5,10)

Les opérateurs simples de comparaison <, >, <= et >= comparent tout d'abord les limites basses. Si elles sont égales, elles comparent les limites hautes. Ces comparaisons ne sont généralement par très utiles pour les données de type range, mais sont néanmoins fournies pour permettre la construction d'index B-tree sur les ranges.

Les opérateurs à gauche de/à droite de/adjacent renvoient toujours false quand une donnée vide de type range est fournie. Cela signifie qu'un intervalle vide est toujours considéré comme n'étant ni avant, ni après tout autre intervalle.

Les opérateurs d'union et de différence échoueront si l'intervalle résultant doit contenir des intervalles disjoints (un tel intervalle ne peut pas être représenté).

Tableau 9.51 montre les fonctions disponibles pour les types range.

Tableau 9.51. Fonctions range

FonctionType renvoyéDescriptionExempleRésultat
lower(anyrange) type de l'élément de l'intervallelimite basse de l'intervallelower(numrange(1.1,2.2))1.1
upper(anyrange) type de l'élément de l'intervallelimite haute de l'intervalleupper(numrange(1.1,2.2))2.2
isempty(anyrange) booleanl'intervalle est-il vide ?isempty(numrange(1.1,2.2))false
lower_inc(anyrange) booleanla limite basse est-elle incluse ?lower_inc(numrange(1.1,2.2))true
upper_inc(anyrange) booleanla limite haute est-elle incluse ?upper_inc(numrange(1.1,2.2))false
lower_inf(anyrange) booleanla limite basse est-elle infinie ?lower_inf('(,)'::daterange)true
upper_inf(anyrange) booleanla limite haute est-elle infinie ?upper_inf('(,)'::daterange)true
range_merge(anyrange, anyrange) anyrangele plus petit intervalle qui inclut les deux indiquésrange_merge('[1,2)'::int4range, '[3,4)'::int4range)[1,4)

Les fonctions lower et upper renvoient NULL si la donnée de type range est vide ou si la limite demandée est infinie. Les fonctions lower_inc, upper_inc, lower_inf et upper_inf renvoient toutes false pour une donnée vide de type range.