PostgreSQLLa base de données la plus sophistiquée au monde.

Version anglaise

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

Voir Section 8.17, « Types intervalle de valeurs » pour un aperçu des types range.

Tableau 9.47, « Opérateurs pour les types range » montre les opérateurs disponibles pour les types range.

Tableau 9.47. Opérateurs pour les types range

Opérateur Description Exemple Résultat
= égal int4range(1,5) = '[1,4]'::int4range t
<> différent numrange(1.1,2.2) <> numrange(1.1,2.3) t
< plus petit que int4range(1,10) < int4range(2,3) t
> plus grand que int4range(1,10) > int4range(1,5) t
<= plus petit ou égal numrange(1.1,2.2) <= numrange(1.1,2.2) t
>= plus grand ou égal numrange(1.1,2.2) >= numrange(1.1,2.0) t
@> contient int4range(2,4) @> int4range(2,3) t
@> contient l'élément '[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestamp t
<@ contenu par int4range(2,4) <@ int4range(1,7) t
<@ l'élément est contenu par 42 <@ int4range(1,7) f
&& surcharge (ont des points en commun) int8range(3,7) && int8range(4,12) t
<< strictement à la gauche de int8range(1,10) << int8range(100,110) t
>> strictement à la droite de int8range(50,60) >> int8range(20,30) t
&< ne s'étend pas à droite de int8range(1,20) &< int8range(18,20) t
&> ne s'étend pas à gauche de int8range(7,20) &> int8range(5,10) t
-|- est adjacent à numrange(1.1,2.2) -|- numrange(2.2,3.3) t
+ union numrange(5,15) + numrange(10,20) [5,20)
* intersection int8range(5,15) * int8range(10,20) [10,15)
- différence int8range(5,15) - int8range(10,20) [5,10)

Les opérateurs de comparaison simples <, >, <= 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.48, « Fonctions range » montre les fonctions disponibles pour les types range.

Tableau 9.48. Fonctions range

Fonction Type renvoyé Description Exemple Résultat
lower(anyrange) type de l'élément de l'intervalle limite basse de l'intervalle lower(numrange(1.1,2.2)) 1.1
upper(anyrange) type de l'élément de l'intervalle limite haute de l'intervalle upper(numrange(1.1,2.2)) 2.2
isempty(anyrange) boolean l'intervalle est-il vide ? isempty(numrange(1.1,2.2)) false
lower_inc(anyrange) boolean la limite basse est-elle incluse ? lower_inc(numrange(1.1,2.2)) true
upper_inc(anyrange) boolean la limite haute est-elle incluse ? upper_inc(numrange(1.1,2.2)) false
lower_inf(anyrange) boolean la limite basse est-elle infinie ? lower_inf('(,)'::daterange) true
upper_inf(anyrange) boolean la limite haute est-elle infinie ? upper_inf('(,)'::daterange) true
range_merge(anyrange, anyrange) anyrange le plus petit intervalle qui inclut les deux indiqués range_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.