PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 16/03/2012 11:58:14

scfi
Membre

Postgresql 9.0.4 : Retourne clé d'un array à partir d'une valeur

Bonjour la communauté,

Comme je l'indique dans le titre, je souhaiterai récupérer la clé d'un array (ou position) à partir de sa valeur qui est unique.
Voici un exemple :
Mon Array est {NULL,true,NULL}
Je souhaite récupérer la positon de true, soit 2

Le problème est que ce tableau n'a pas de taille connue (n élément), sinon je me serai débrouiller avec un CASE/WHEN.

Merci d'avance pour vos réponses,

Hors ligne

#2 16/03/2012 12:15:09

Marc Cousin
Membre

Re : Postgresql 9.0.4 : Retourne clé d'un array à partir d'une valeur

Il y a la solution du bout de PL (que j'utiliserais, ça a l'avantage d'être lisible).

En SQL pur:

select * from (SELECT *,row_number() over () from unnest('{NULL,true,NULL}'::boolean[])) as tmp where unnest=true limit 1;
unnest | row_number
--------+------------
t      |          2


Marc.

Hors ligne

#3 16/03/2012 13:01:10

scfi
Membre

Re : Postgresql 9.0.4 : Retourne clé d'un array à partir d'une valeur

Merci Marc.

Pour infos, j'ai eu ceci également :
WITH T1 AS
(
SELECT (ARRAY[NULL, true, NULL])[k] as Val1, k
         FROM  generate_series(1,array_upper(ARRAY[NULL, true, NULL],1)) k
)
SELECT k FROM T1 where val1 = true

Je vais tester les deux, et comparer les performances.

Hors ligne

Pied de page des forums