Documentation PostgreSQL 9.6.24 > Langage SQL > Fonctions et opérateurs > Fonctions et opérateurs sur les données de type range | |
Fonctions et opérateurs de tableaux | Fonctions d'agrégat |
Voir Section 8.17, « Types intervalle de valeurs » pour un aperçu des types range.
Tableau 9.49, « Opérateurs pour les types range » montre les opérateurs disponibles pour les types range.
Tableau 9.49. 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 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.50, « Fonctions range » montre les fonctions disponibles pour les types range.
Tableau 9.50. 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.