2016-09-27 7 views
3

各行にJSON値を格納するための列を持つテーブルがあります。現在、これらは標準化されていません。 JSONの各値は、属性の数とタイトルで標準化されています。各JSON値に指定された属性が含まれているかどうかを判断するために使用できるクエリはありますか?JSON値に指定された属性が含まれているかどうかを確認するSQLクエリ

{"name":"Item 1","cost":"4.99"} 
{"name":"Item 2"} 
{"name":"Item 3","cost":""} 
{"name":"Item 4"} 

どのようにします::

  • は "コスト" 属性(項目1を持っているどの行を決定し、ここで例として

    は、JSONの値の一部がどのように見えるかです& 3)

  • 「コスト」属性を持たない行を決定する(項目2 & 4)
  • 「コスト」属性(項目1)に値が設定されている行を特定する

ありがとうございます!これは私の最初の質問です(少なくとも最近)ので、どんな助けも大歓迎です!

+0

フィールドの文字列値を解析して、「コスト」属性を探します。 – IAbstract

答えて

3

あなたはJSONデータ型を追加するMySQL 5.7を使用していると仮定します。 を使用してcostプロパティにアクセスします。そのようなプロパティはありませんNULLになります。

  1. WHERE JSON_EXTRACT(colname, '$.cost') IS NOT NULL
  2. WHERE JSON_EXTRACT(colname, '$.cost') IS NULL
  3. WHERE JSON_EXTRACT(colname, '$.cost') != ''

JSONの値がnullある場合もNULLあろう。私はこれを存在しない価値と区別する方法はないと思う。

+0

私は存在しない属性とそこにある属性を区別できませんが、値はありません。それでも、これはかなり近いですし、私を大きく助けます。ありがとう! –

+0

JSONデータにはすべて「コスト」:nullがありますか? – Barmar

+0

一部の行には「コスト」属性がありますが、すべてではありません。私の目標は、それを持っていない行をすばやく並べ替えることでした。そのため、JSON文字列全体を更新するのではなく、JSON修正機能を追加してその部分を更新することができました。 –

0

MySQLはJSON配列を解析しません。それはそれらを文字列のように扱います。したがって、LIKEを使用する必要があります。

+0

MySQL 5.7にはJSON関数が組み込まれています。 – Barmar

+0

https://dev.mysql.com/doc/refman/5.7/en/json.htmlを参照してください。 – Barmar

+0

ああ。私は5.7に何も移動していない。 – CptMisery

関連する問題