PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 16.10 » Langage SQL » Fonctions et opérateurs » Fonctions et opérateurs tableau

9.19. Fonctions et opĂ©rateurs tableau #

Tableau 9.53 montre les opĂ©rateurs spĂ©cialisĂ©s disponibles pour les types tableau. En plus de ces derniers, les opĂ©rateurs habituels de comparaison montrĂ©s dans Tableau 9.1 sont disponibles pour les tableaux. Les opĂ©rateurs de comparaison comparent le contenu des tableaux Ă©lĂ©ments par Ă©lĂ©ments, en utilisant la fonction de comparaison B-tree par dĂ©faut pour le type de donnĂ©es de l'Ă©lĂ©ment, et trient en se basant sur la premiĂšre diffĂ©rence rencontrĂ©e. Dans les tableaux multi-dimensionnels, les Ă©lĂ©ments sont visitĂ©s dans l'ordre des lignes (le dernier indice varie plus rapidement). Si les contenus de deux tableaux sont identiques mais que leur dimension est diffĂ©rente, la premiĂšre diffĂ©rence dans l'information de dimension dĂ©termine l'ordre de tri.

Tableau 9.53. OpĂ©rateurs de tableau

Opérateur

Description

Exemple(s)

anyarray @> anyarray → boolean

Est-ce que le premier tableau contient le second, autrement dit, est-ce que chaque Ă©lĂ©ment apparaissant dans le deuxiĂšme tableau est Ă©gal Ă  un Ă©lĂ©ment du premier tableau ? (les duplicats ne sont pas traitĂ©s spĂ©cialement, donc ARRAY[1] et ARRAY[1,1] sont tous les deux considĂ©rĂ©s comme contenant l'autre.)

ARRAY[1,4,3] @> ARRAY[3,1,3] → t

anyarray <@ anyarray → boolean

Est-ce que le premier tableau est contenu par le second ?

ARRAY[2,2,7] <@ ARRAY[1,7,4,2,6] → t

anyarray && anyarray → boolean

Est-ce que les tableaux se surchargent, autrement dit ont des Ă©lĂ©ments en commun ?

ARRAY[1,4,3] && ARRAY[2,1] → t

anycompatiblearray || anycompatiblearray → anycompatiblearray

ConcatĂšne les deux tableaux. ConcatĂ©ner un tableau NULL ou un tableau vide est une opĂ©ration vide ; sinon les tableaux doivent avoir le mĂȘme nombre de dimensions (comme illustrĂ© dans le premier exemple) ou diffĂ©rer de 1 dans le nombre de dimensions (comme illustrĂ© dans le second exemple). Si les tableaux n'ont pas des Ă©lĂ©ments de types identiques, ils seront convertis dans un type commun (voir Section 10.5).

ARRAY[1,2,3] || ARRAY[4,5,6,7] → {1,2,3,4,5,6,7}

ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9.9]] → {{1,2,3},{4,5,6},{7,8,9.9}}

anycompatible || anycompatiblearray → anycompatiblearray

ConcatĂšne un Ă©lĂ©ment au dĂ©but d'un tableau (qui doit ĂȘtre vide ou Ă  une dimension).

3 || ARRAY[4,5,6] → {3,4,5,6}

anycompatiblearray || anycompatible → anycompatiblearray

ConcatĂšne un Ă©lĂ©ment Ă  la fin d'un tableau (qui doit ĂȘtre vide ou Ă  une dimension).

ARRAY[4,5,6] || 7 → {4,5,6,7}


Voir Section 8.15 pour plus de dĂ©tails sur le comportement des opĂ©rateurs pour tableau. Voir Section 11.2 pour plus de dĂ©tails sur les opĂ©rateurs supportant des opĂ©rations indexĂ©es.

Tableau 9.54 montre les fonctions disponibles pour utilisation avec des types tableau. Voir Section 8.15 pour plus d'informations et d'exemples sur l'utilisation de ces fonctions.

Tableau 9.54. Fonctions tableau

Fonction

Description

Exemple(s)

array_append ( anycompatiblearray, anycompatible ) → anycompatiblearray

Ajoute un élément à la fin d'un tableau (identique à l'opérateur anycompatiblearray || anycompatible).

array_append(ARRAY[1,2], 3) → {1,2,3}

array_cat ( anycompatiblearray, anycompatiblearray ) → anycompatiblearray

ConcatÚne deux tableaux (identique à l'opérateur anycompatiblearray || anycompatiblearray).

array_cat(ARRAY[1,2,3], ARRAY[4,5]) → {1,2,3,4,5}

array_dims ( anyarray ) → text

Renvoie une représentation textuelle des dimensions du tableau.

array_dims(ARRAY[[1,2,3], [4,5,6]]) → [1:2][1:3]

array_fill ( anyelement, integer[] [, integer[] ] ) → anyarray

Renvoie un tableau rempli de copies de la valeur donnée, ayant les dimensions de longueurs spécifiés par le deuxiÚme argument. Le troisiÚme argument optionnel fournit des valeurs de limite basse pour chaque dimension (qui vaut par défaut 1).

array_fill(11, ARRAY[2,3]) → {{11,11,11},{11,11,11}}

array_fill(7, ARRAY[3], ARRAY[2]) → [2:4]={7,7,7}

array_length ( anyarray, integer ) → integer

Renvoie la longueur de la dimension réclamée du tableau. (Renvoie NULL à la place de 0 pour des dimensions vides ou manquantes.)

array_length(array[1,2,3], 1) → 3

array_length(array[]::int[], 1) → NULL

array_length(array['text'], 2) → NULL

array_lower ( anyarray, integer ) → integer

Renvoie la limite basse de la dimension réclamée du tableau.

array_lower('[0:2]={1,2,3}'::integer[], 1) → 0

array_ndims ( anyarray ) → integer

Renvoie le nombre de dimensions du tableau.

array_ndims(ARRAY[[1,2,3], [4,5,6]]) → 2

array_position ( anycompatiblearray, anycompatible [, integer ] ) → integer

Renvoie l'indice de la premiĂšre occurrence du second argument dans le tableau, ou NULL s'il n'est pas prĂ©sent. Si le troisiĂšme argument est donnĂ©, la recherche commence Ă  cet indice. Le tableau doit ĂȘtre d'une dimension. Les comparaisons se font en utilisant les sĂ©mantiques de IS NOT DISTINCT FROM, donc il est possible de rechercher un NULL.

array_position(ARRAY['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], 'mon') → 2

array_positions ( anycompatiblearray, anycompatible ) → integer[]

Renvoie un tableau des indices de toutes les occurrences du deuxiĂšme argument dans le tableau donnĂ© comme premier argument. Le tableau doit ĂȘtre Ă  une dimension. Les comparaisons sont effectuĂ©es en utilisant les sĂ©mantiques de IS NOT DISTINCT FROM, il est donc possible de rechercher un NULL. NULL n'est renvoyĂ© que si le tableau vaut NULL ; si la valeur n'est pas trouvĂ©e dans le tableau, un tableau vide est renvoyĂ©.

array_positions(ARRAY['A','A','B','A'], 'A') → {1,2,4}

array_prepend ( anycompatible, anycompatiblearray ) → anycompatiblearray

Ajoute un élément au début d'un tableau (identique à l'opérateur anyelement || anyarray).

array_prepend(1, ARRAY[2,3]) → {1,2,3}

array_remove ( anycompatiblearray, anycompatible ) → anycompatiblearray

Supprime tous les Ă©lĂ©ments identiques Ă  la valeur donnĂ©e Ă  partir du tableau. Le tableau doit ĂȘtre Ă  une dimension. Les comparaisons sont faites en utilisant les sĂ©mantiques de IS NOT DISTINCT FROM, dont il est possible de supprimer un NULL.

array_remove(ARRAY[1,2,3,2], 2) → {1,3}

array_replace ( anycompatiblearray, anycompatible, anyelement ) → anycompatiblearray

Remplace chaque élément de tableau égal au second argument avec le troisiÚme argument.

array_replace(ARRAY[1,2,5,4], 5, 3) → {1,2,3,4}

array_sample ( array anyarray, n integer ) → anyarray

Renvoie un tableau de n Ă©lĂ©ments sĂ©lectionnĂ©s au hasard dans array. n ne peut pas dĂ©passer la longueur de la premiĂšre dimension de array. Si array est multi-dimensionnel, un « item Â» est une partie ayant un premier indice indiquĂ©.

array_sample(ARRAY[1,2,3,4,5,6], 3) → {2,6,1}

array_sample(ARRAY[[1,2],[3,4],[5,6]], 2) → {{5,6},{1,2}}

array_shuffle ( anyarray ) → anyarray

Mélange au hasard la premiÚre dimension du tableau.

array_shuffle(ARRAY[[1,2],[3,4],[5,6]]) → {{5,6},{1,2},{3,4}}

array_to_string ( array anyarray, delimiter text [, null_string text ] ) → text

Convertit chaque Ă©lĂ©ment de tableau en sa reprĂ©sentation textuelle, et les concatĂšne en les sĂ©parant par la chaĂźne delimiter. Si null_string est indiquĂ© et ne vaut pas NULL, alors les entrĂ©es de tableau NULL sont reprĂ©sentĂ©es par cette chaĂźne ; sinon elles sont omises. Voir aussi string_to_array.

array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') → 1,2,3,*,5

array_upper ( anyarray, integer ) → integer

Renvoie la limite haute de la dimension demandée du tableau.

array_upper(ARRAY[1,8,3,7], 1) → 4

cardinality ( anyarray ) → integer

Renvoie le nombre total d'éléments dans le tableau, ou 0 si le tableau est vide.

cardinality(ARRAY[[1,2],[3,4]]) → 4

trim_array ( array anyarray, n integer ) → anyarray

Coupe un tableau en supprimant les n derniers éléments. Si le tableau est multidimensionnel, seule la premiÚre dimension est coupée.

trim_array(ARRAY[1,2,3,4,5,6], 2) → {1,2,3,4}

unnest ( anyarray ) → setof anyelement

Étend un tableau en un ensemble de lignes. Les Ă©lĂ©ments du tableau sont lus dans l'ordre de stockage.

unnest(ARRAY[1,2]) →

 1
 2

unnest(ARRAY[['foo','bar'],['baz','quux']]) →

 foo
 bar
 baz
 quux
      

unnest ( anyarray, anyarray [, ... ] ) → setof anyelement, anyelement [, ... ]

Étend plusieurs tableaux (potentiellement de types de donnĂ©es diffĂ©rents) en un ensemble de lignes. Si les tableaux ne sont pas de la mĂȘme longueur, alors les plus courts sont alignĂ©s avec des NULL. Cette forme est seulement autorisĂ©e dans la clause FROM d'une requĂȘte ; voir Section 7.2.1.4.

select * from unnest(ARRAY[1,2], ARRAY['foo','bar','baz']) as x(a,b) →

 a |  b
---+-----
 1 | foo
 2 | bar
   | baz
      


Voir aussi Section 9.21 sur la fonction d'agrĂ©gat array_agg pour une utilisation avec les tableaux.