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

#1 18/06/2018 12:22:48

damalaan
Membre

[RESOLU]requete sur un champs jsonb

Bonjour,

je dois faire une requête sur une table dont un des champs est en jsonb avec un stockage du style :

client, champjson
1234, [{"a": "", "b": "", "c": "", "d": [19, 38, 34, 13], "e": ""}]
4321,[{"a": "", "b": "", "c": "", "d": [36], "e": ""}]

je souhaite que le résultat de ma requête soit ainsi :

1234,19
1234,38
1234,34
1234,13
4321,36

j'ai donc tenté une requête comme ceci :

 select client, champjson->'d' from matable

et j'obtien

1234,NULL
4321,NULL

merci de votre aide

Dernière modification par damalaan (18/06/2018 15:14:11)

Hors ligne

#2 18/06/2018 13:59:51

dverite
Membre

Re : [RESOLU]requete sur un champs jsonb

Dans les 2 exemples montrés, champjson commençe par un crochet, qui signale le début d'un tableau.

C'est un tableau contenant un objet alors que la notation champjson->'d' retourne un champ d'un objet, pas d'un tableau d'objets.

Moralité il faut commençer par sortir l'élement du tableau, par exemple avec la fonction json_array_elements()

 select json_array_elements($$[{"a": "", "b": "", "c": "", "d": [19, 38, 34, 13], "e": ""}]$$)->'d';
     ?column?     
------------------
 [19, 38, 34, 13]

Hors ligne

#3 18/06/2018 14:45:48

damalaan
Membre

Re : [RESOLU]requete sur un champs jsonb

Yes merci
c'est un peu sportif cette histoire, voilà le code final pour extraire tous les éléments

select client , json_array_elements_text(json_array_elements(champjson::json)->'d')::int as pb FROM matable

par contre il  faut "retyper" le jsonb en json sinon ça ne fonctionne pas

Hors ligne

#4 19/06/2018 09:30:01

duple
Membre

Re : [RESOLU]requete sur un champs jsonb

Par curiosité, quelle est le réel intérêt de stoquer les données ainsi dans un champs json, la modèlisation ne pourrait être autrement ?

Hors ligne

#5 19/06/2018 09:33:12

damalaan
Membre

Re : [RESOLU]requete sur un champs jsonb

duple a écrit :

Par curiosité, quelle est le réel intérêt de stoquer les données ainsi dans un champs json, la modèlisation ne pourrait être autrement ?

sais pas !!! dans ce cas je ne suis qu'utilisateur !!

Hors ligne

Pied de page des forums