Module_dataと呼ばれる次の表があります。現在、3行のエントリがあります。
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"}
列データのデータ型はjsonb
です。 like
演算子を使用してクエリしようとしています。次のようなもの:
SELECT * FROM module_data WHERE title LIKE '%Board%';
私はjsonb
サポートを見てきましたが、like
演算子はないようです。誰かアドバイスがあれば。
データ列がテキスト型の場合、キャスト時に->>
を使用します。
select * from module_data where data::json->>'title' like '%Board%'
すでにjsonの場合:
select * from module_data where data->>'title' like '%Board%'
Jsonbタイプの列では次のように機能します。
select * from table_name
where
column_name::text like '%Something%'
より多くの例と実装に関する良い記事を見つけました: https://www.compose.com/articles/faster-operations-with-the-jsonb-data-type-in-postgresql/
それが役に立てば幸い!
このページを見つけた他の人に十分なもう1つのオプションは、列をテキストタイプにキャストすることです。例えば
select * from module_data where data::text like '%Board%'
ただし、これはjson全体を検索するため、他のフィールドが問題にならないことを保証できる場合にのみ使用してください。
私はそれが次のようであるべきだと思う
select * from module_data where data->>'$."title"' like '%Board%'
それは私のために働いただけです。