2017-03-21 15 views
4

私はmodule_dataという以下のテーブルを持っています。現在、3行のエントリがあります。PostgreSQL jsonのようなクエリ

   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サポートを見てきた等のオペレータがあるように思えるdoes notの。誰かが助言を持っている場合。

+0

'like'オペレータが存在するが、' title'カラムはありませんない。これは 'data'カラムの* property/attribute *であるため、[値を抽出する必要があります](https://www.postgresql.org/docs/current/static/functions-json.html)からそれを比較してください: 'data - >> 'title''または 'data#>> ARRAY ['title']' – pozs

答えて

10

データ列がテキストタイプである場合には、キャストに->>を使用します。それはすでにJSONなら

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

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

ありがとうございました。 jsonbを初めて使用したので、私は本当にヒントを頂きました。 – adviner

+2

答えを読んでいる人に通知してください。SQLインジェクションを避けるためにクエリパラメータを使用してください。 – baijum

関連する問題