1

postgresqlの1列にこのデータがあります

{
    "geometry":{
        "status":"Point",
        "coordinates":[
            -122.421583,
            37.795027    
        ]          
    },

そして私は彼のクエリを使用して

select * from students where data_json LIKE '%status%' ;

上記のクエリは結果を返しますが、これはそうではありません

select * from students where data_json LIKE '%status:%' ;

どうすればそれを修正できますか

4

1 に答える 1

3

もちろん、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 パーサーを書きたくないからです。このブログ エントリは多少関連性があります

于 2013-04-03T04:52:37.953 に答える