2017-10-17 12 views
0

J'ai une table avec des balises stockées en tant que colonne JSONB. Comme:Postgresql: comment effectuer une requête LIKE sur un tableau json?

id tags 
---- ------------------------------ 
1 ["red", "blue"] 
2 ["orange", "light pink"] 
3 ["pink", "green"] 

Je voudrais sélectionner des lignes contenant des balises qui correspondent à un modèle partiellement - dans mon cas, je veux des tags avec des espaces en eux. Quelque chose comme SELECT * FROM the_table WHERE tags LIKE '% %'. La conversion du tableau en texte fonctionne presque, sauf que tout concorde car Postgres place un espace après les virgules dans le fichier JSON de sortie.

Répondre

1

Utilisez la fonction jsonb_array_elements_text().

with my_table(id, tags) as (
values 
    (1, '["red", "blue"]'::jsonb), 
    (2, '["orange", "light pink"]'), 
    (3, '["pink", "green"]') 
) 

select * 
from my_table, jsonb_array_elements_text(tags) 
where value like '% %'; 

id |   tags   | value  
----+--------------------------+------------ 
    2 | ["orange", "light pink"] | light pink 
(1 row)