sql >> データベース >  >> RDS >> Mysql

MySQLのJSON_VALUE()

    MySQLでは、JSON_VALUE() 関数は、指定されたパスでJSONドキュメントから値を抽出します。

    この関数はMySQL8.0.21で導入されました。

    構文

    構文は次のようになります:

    JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])

    場所:

    on_empty:
        {NULL | ERROR | DEFAULT value} ON EMPTY
    
    on_error:
        {NULL | ERROR | DEFAULT value} ON ERROR

    簡単な例を次に示します。

    SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );

    結果:

    Dog

    配列

    配列から値を取得する例を次に示します。

    SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );

    結果:

    36

    配列はゼロベースなので、1 2番目の要素を返します(0 最初を返します)。

    埋め込みドキュメント

    埋め込みオブジェクトから値を取得する例を次に示します。

    SELECT JSON_VALUE(
        '{ 
            "_id" : 1, 
            "details" : { 
                "name" : "Wag",
                "type" : "Dog"
                } 
        }', 
        '$.details.type' 
        );

    結果:

    Dog

    リターンタイプ

    返品タイプを指定する例を次に示します。

    SELECT JSON_VALUE(
        '{ 
            "_id" : 1, 
            "details" : { 
                "name" : "Wag",
                "type" : "Dog"
                } 
        }', 
        '$.details' RETURNING json
        );

    結果:

    {"name": "Wag", "type": "Dog"}

    戻りタイプを指定しない場合、戻りタイプはVARCHAR(512)です。 。

    空の結果

    デフォルトでは、指定されたパスにデータが見つからない場合、NULL 返されます:

    SELECT JSON_VALUE(
        '{ 
            "name" : "Wag",
            "type" : "Dog"
        }', 
        '$.score'
        );

    結果:

    NULL

    ただし、次のオプションを使用して、指定されたパスでデータが見つからない場合に何が発生するかを明示的に指定できます。

    • NULL ON EMPTY :関数はNULLを返します;これがデフォルトの動作です。
    • DEFAULT value 空の場合 :提供されたvalue が返されます。値のタイプは、戻りタイプのタイプと一致する必要があります。
    • ERROR ON EMPTY :関数はエラーをスローします。

    例:

    SELECT JSON_VALUE(
        '{ 
            "name" : "Wag",
            "type" : "Dog"
        }', 
        '$.score' 
        DEFAULT 'Nothing found' ON EMPTY
        );

    結果:

    Nothing found

    エラー

    以下を使用して、エラーが発生したときに何が発生するかを指定できます。

    • NULL ON ERRORJSON_VALUE() NULLを返します;これがデフォルトの動作です。
    • DEFAULT value エラー時 :これは返される値です。その値は、戻りタイプの値と一致する必要があります。
    • ERROR ON ERROR :エラーがスローされます。

    使用する場合は、ON EMPTY ON ERRORの前に置く必要があります 句。間違った順序で指定すると、構文エラーが発生します。

    インデックス

    MySQL 8.0.21リリースノートに記載されているように、JSON_VALUE() 関数は、JSONでのインデックスの作成を簡素化します 列。 JSON_VALUE(json_docへの呼び出し path typeを返す CAST( JSON_UNQUOTE( JSON_EXTRACT(json_doc path ))AS type

    リリースノートで使用されている例は次のとおりです。

    CREATE TABLE inventory(
        items JSON,
        INDEX i1 ( (JSON_VALUE(items, '$.name' RETURNING CHAR(50))) ),
        INDEX i2 ( (JSON_VALUE(items, '$.price' RETURNING DECIMAL(5,2))) ),
        INDEX i3 ( (JSON_VALUE(items, '$.quantity' RETURNING UNSIGNED)) )
    );

    1. EBS11iおよびR12でFND_STATSを使用してスキーマ統計を収集する

    2. Postgres9.0以降でPL/pgSQLを使用してテーブルをループする

    3. UbuntuからMySQLを完全に削除する方法

    4. メッセージ8672、レベル16、状態1、行1 MERGEステートメントが、同じ行を複数回更新または削除しようとしました