Documentation PostgreSQL 8.4.22 > Langage SQL > Fonctions et opérateurs > Fonctions retournant des ensembles
PrécédentComparaisons de lignes et de tableaux Fonctions d'informations systèmeSuivant

9.22. Fonctions retournant des ensembles

Cette section décrit des fonctions qui peuvent renvoyer plus d'une ligne. Actuellement, les seules fonctions dans cette classe sont les fonctions de génération de séries, détaillées dans le Tableau 9.45, « Fonctions de génération de séries » et Tableau 9.46, « Fonctions de génération d'indices ».

Tableau 9.45. Fonctions de génération de séries

Fonction Type d'argument Type de retour Description
generate_series (début, fin) int ou bigint setof int ou setof bigint (même type que l' argument) Produit une série de valeurs, de début à fin avec un incrément de un.
generate_series (début, fin, pas) int ou bigint setof int ou setof bigint (même type que l'argument) Produit une série de valeurs, de début à fin avec un incrément de pas.
generate_series(début, fin, pas interval) timestamp or timestamp with time zone setof timestamp ou setof timestamp with time zone (identique au type de l'argument) Génère une série de valeurs, allant de start à stop avec une taille pour chaque étape de pas

Quand pas est positif, aucune ligne n'est renvoyée si début est supérieur à fin. À l'inverse, quand pas est négatif, aucune ligne n'est renvoyée si début est inférieur à fin. De même, aucune ligne n'est renvoyée pour les entrées NULL. Une erreur est levée si pas vaut zéro.

Quelques exemples :

SELECT * FROM generate_series(2,4);
 generate_series
-----------------
 2
 3
 4
(3 rows)
SELECT * FROM generate_series(5,1,-2);
 generate_series
-----------------
 5
 3
 1
(3 rows)
SELECT * FROM generate_series(4,3);
 generate_series
-----------------
(0 rows)
-- cet exemple se base sur l'opérateur date-plus-entier
SELECT current_date + s.a AS dates FROM generate_series(0,14,7) AS s(a);
 dates
------------
 2004年02月05日
 2004年02月12日
 2004年02月19日
(3 rows)
SELECT * FROM generate_series('2008-03-01 00:00'::timestamp,
 '2008-03-04 12:00', '10 hours');
 generate_series 
---------------------
 2008年03月01日 00:00:00
 2008年03月01日 10:00:00
 2008年03月01日 20:00:00
 2008年03月02日 06:00:00
 2008年03月02日 16:00:00
 2008年03月03日 02:00:00
 2008年03月03日 12:00:00
 2008年03月03日 22:00:00
 2008年03月04日 08:00:00
(9 rows)

Tableau 9.46. Fonctions de génération d'indices

Nom Type de retour Description
generate_subscripts(array anyarray, dim int) setof int Génère une série comprenant les indices du tableau donné.
generate_subscripts(array anyarray, dim int, reverse boolean) setof int Génère une série comprenant les indices du tableau donné. Quand reverse vaut true, la série est renvoyé en ordre inverse.

generate_subscripts est une fonction qui génère un ensemble d'indices valides pour la dimension indiquée du tableau fourni. Aucune ligne n'est renvoyée pour les tableaux qui n'ont pas la dimension requise ou pour les tableaux NULL (mais les indices valides sont renvoyées pour les éléments d'un tableau NULL). Quelques exemples suivent :

-- usage basique
select generate_subscripts('{NULL,1,NULL,2}'::int[], 1) as s;
 s 
---
 1
 2
 3
 4
(4 rows)
-- presenting an array, the subscript and the subscripted
-- value requires a subquery
select * from arrays;
 a 
--------------------
 {-1,-2}
 {100,200}
(2 rows)
select a as array, s as subscript, a[s] as value
from (select generate_subscripts(a, 1) as s, a from arrays) foo;
 array | subscript | value 
-----------+-----------+-------
 {-1,-2} | 1 | -1
 {-1,-2} | 2 | -2
 {100,200} | 1 | 100
 {100,200} | 2 | 200
(4 rows)
-- tableau 2D
create or replace function unnest2(anyarray)
returns setof anyelement as $$
select 1ドル[i][j] 
 from generate_subscripts(1,1ドル) g1(i),
 generate_subscripts(1,2ドル) g2(j);
$$ language sql immutable;
CREATE FUNCTION
postgres=# select * from unnest2(array[[1,2],[3,4]]);
 unnest2 
---------
 1
 2
 3
 4
(4 rows)

AltStyle によって変換されたページ (->オリジナル) /