it-swarm.com.de

Postgresql json wie Abfrage

Ich habe die folgende Tabelle mit dem Namen module_data. Derzeit hat es drei Zeilen mit Einträgen:

                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"}

Die Daten sind eine Jsonb-Spalte. Ich versuche, die Datenspalten mit Like abzufragen. Etwas wie das Folgende:

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

Ich habe mir die Jsonb-Unterstützung angesehen und es scheint nicht, dass es einen ähnlichen Operator gibt. Wenn jemand einen Rat hat.

15
adviner

Wenn es sich bei der Datenspalte um einen Texttyp handelt, verwenden Sie beim Umwandeln ->>:

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

Wenn es schon json ist:

select * from module_data where data->>'title' like '%Board%'
31
Gurwinder Singh

Folgende Arbeiten für den jsonb-Typ von Spalten:

select * from table_name
where 
column_name::text like '%Something%'

Einen guten Artikel zu weiteren Beispielen und Implementierungen gefunden: https://www.compose.com/articles/faster-operations-with-the-jsonb-data-type-in-postgresql/

Ich hoffe es hilft!

1
Deep Sehgal

Eine andere Option, die für andere Personen, die diese Seite gefunden haben, ausreichend sein kann, besteht darin, die Spalte nur in den Texttyp umzuwandeln. Z.B

select * from module_data where data::text like '%Board%'

Beachten Sie jedoch, dass dies den gesamten json durchsucht und nur verwendet werden sollte, wenn Sie garantieren können, dass die anderen Felder kein Problem darstellen.

1
nevster

Ich denke es sollte so sein 

select * from module_data where data->>'$."title"' like '%Board%'

dann hat es nur für mich funktioniert. 

0
Karansing