もちろん、2 番目のものは一致が見つかりませんstatus:
。値にテキストはありません。私はあなたが欲しかったと思います:
select * from students where data_json LIKE '%"status":%'
...しかし、構造化されたデータでテキスト パターン マッチングを試みるほとんどの場合と同様に、これは一般的に、あなたを苦しめる恐ろしい考えです。問題の例をいくつか示します。
{
"somekey": "the value is \"status\": true"
}
... whereはテキスト値"status":
の一部として表示され、一致しない場合でも一致します。
{
status : "blah"
}
wherestatus
には引用符がなく、引用符とコロンの間にスペースがあります。JavaScript に関する限り、これは同じですが、"status":
一致しません。
json 内のフィールドを検索したり、json からフィールドを抽出しようとしている場合は、json パーサーを使用してください。PL/V8、または pl/perl、pl/pythonu などのツールで利用可能な json ライブラリが興味深いかもしれません。将来の PostgreSQL バージョンには、パスで json キーを取得したり、json 値が存在するかどうかをテストしたりする関数が含まれますが、 9.2 にはありません。
この時点で、「なぜ正規表現を使用しないのか」と考えているかもしれません。そこには行かないでください。正規表現で完全な JSON パーサーを書きたくないからです。このブログ エントリは多少関連性があります。