2017-03-21 3 views
4

J'ai la table suivante appelée module_data. Actuellement, il comporte trois rangées d'entrées:Postgresql json like query

   id        data 
0ab5203b-9157-4934-8aba-1512afb0abd0 {"title":"Board of Supervisors Meeting","id":"1i3Ytw1mw98"} 
7ee33a18-63da-4432-8967-bde5a44347a0 {"title":"Board of Supervisors Meeting","id":"4-dNAg2mn6o"} 
8d71ca35-74eb-4751-b635-114bf04843f1 {"title":"COPD 101", "id":"l9O0jCR-sxg"} 

Les données sont une colonne jsonb. J'essaie d'interroger les colonnes de données en utilisant comme. Quelque chose comme ce qui suit:

SELECT * FROM module_data WHERE title LIKE '%Board%'; 

J'ai regardé le soutien de jsonb et il ne marche pas semble être un opérateur comme. Si quelqu'un a un conseil.

+0

L'opérateur 'like' existe, mais une colonne' title' ne ne pas. C'est une * propriété/attribut * de la colonne 'data', donc [vous devrez extraire sa valeur] (https://www.postgresql.org/docs/current/static/functions-json.html) pour comparez-le: 'data - >> 'title'' ou' data # >> ARRAY [' title '] ' – pozs

Répondre

10

Si la colonne de données est de type texte, puis utilisez ->> vous lancez:

select * from module_data where data::json->>'title' like '%Board%' 

S'il est déjà JSON:

select * from module_data where data->>'title' like '%Board%' 
+0

Génial, merci. C'est ma première fois en utilisant jsonb donc j'apprécie vraiment la pointe – adviner

+2

Rappel à ceux qui lisent la réponse: Utilisez le paramètre de requête pour éviter l'injection SQL. – baijum