| Précédent | Niveau supérieur | Suivant |
| 9.25. Comparaisons de ligne et de tableau | Sommaire | 9.27. Fonctions et opérateurs d'information sur le système |
Cette section décrit les fonctions qui renvoient potentiellement plus d'une ligne. Les fonctions les plus fréquemment utilisées de ce type sont celles générant des séries, comme détaillées dans Tableau 9.69 et Tableau 9.70. D'autres, plus spécialisées, sont décrites ailleurs dans ce manuel. Voir Section 7.2.1.4 pour des façons de combiner plusieurs fonctions renvoyant des ensembles.
Tableau 9.69. Fonctions générant des séries
Fonction Description |
|---|
Génère une série de valeurs à partir de |
Génère une série de valeurs à partir de |
Quand step est positif, aucune ligne n'est renvoyée si
start est supérieure à stop.
Par contre, quand step est négatif negative, aucune ligne n'est renvoyée
si start est inférieur à stop.
Aucune ligne n'est renvoyé si au moins une entrée est NULL.
Si step vaut zéro, c'est considéré comme une erreur.
Voici 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)
SELECT generate_series(1.1, 4, 1.3);
generate_series
-----------------
1.1
2.4
3.7
(3 rows)
-- cet exemple se base sur l'opérateur date-plus-integer :
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)
-- cet exemple suppose que TimeZone est configuré à UTC ; notez la transition DST:
SELECT * FROM generate_series('2001-10-22 00:00 -04:00'::timestamptz,
'2001-11-01 00:00 -05:00'::timestamptz,
'1 day'::interval, 'America/New_York');
generate_series
------------------------
2001年10月22日 04:00:00+00
2001年10月23日 04:00:00+00
2001年10月24日 04:00:00+00
2001年10月25日 04:00:00+00
2001年10月26日 04:00:00+00
2001年10月27日 04:00:00+00
2001年10月28日 04:00:00+00
2001年10月29日 05:00:00+00
2001年10月30日 05:00:00+00
2001年10月31日 05:00:00+00
2001年11月01日 05:00:00+00
(11 rows)
Tableau 9.70. Fonctions générant des indices
Fonction Description |
|---|
Génère une série comprenant les indices valides de la
|
Génère une série comprenant les indices valides de la
|
generate_subscripts est une fonction de facilité qui génère
l'ensemble d'indices valides pour la dimension donnée pour le tableau.
Aucune ligne n'est renvoyée pour les tableaux qui n'ont pas la dimension
demandée ou si une des lignes vaut NULL.
Voici quelques exemples :
-- utilisation basique :
SELECT generate_subscripts('{NULL,1,NULL,2}'::int[], 1) AS s;
s
---
1
2
3
4
(4 rows)
-- à partir d'un tableau, l'indice et la valeur indicée
-- nécessite une sous-requête :
SELECT * FROM arrays;
a
--------------------
{-1,-2}
{100,200,300}
(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,300} | 1 | 100
{100,200,300} | 2 | 200
{100,200,300} | 3 | 300
(5 rows)
-- déballer un 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
SELECT * FROM unnest2(ARRAY[[1,2],[3,4]]);
unnest2
---------
1
2
3
4
(4 rows)
Quand une fonction dans la clause FROM a pour suffixe
WITH ORDINALITY, une colonne bigint est
ajoutée aux colonnes en sortie de la fonction, commençant à 1 et
s'incrémentant de 1 pour chaque ligne de la sortie de la fonction. Ceci est
plus utile dans le cas de fonctions renvoyant des ensembles comme
unnest().
-- fonction renvoyant un ensemble WITH ORDINALITY:
SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n);
ls | n
-----------------+----
pg_serial | 1
pg_twophase | 2
postmaster.opts | 3
pg_notify | 4
postgresql.conf | 5
pg_tblspc | 6
logfile | 7
base | 8
postmaster.pid | 9
pg_ident.conf | 10
global | 11
pg_xact | 12
pg_snapshots | 13
pg_multixact | 14
PG_VERSION | 15
pg_wal | 16
pg_hba.conf | 17
pg_stat_tmp | 18
pg_subtrans | 19
(19 rows)