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

MariaDB JSON_SET()の説明

    MariaDBでは、JSON_SET() は、データを更新またはJSONドキュメントに挿入し、結果を返す組み込み関数です。

    JSON_SET() JSON_INSERT()に対して、データを更新および挿入できます データとJSON_REPLACE()のみを挿入できます データのみを更新できます。

    構文

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

    JSON_SET(json_doc, path, val[, path, val] ...)

    場所:

    • json_doc JSONドキュメントです。
    • path データを挿入したり、値を更新したりする要素のパスです。
    • val は新しい値です。

    実例を示します。

    SET @json = '
        { 
            "name" : "Wag", 
            "type" : "Cat" 
        }
    ';
    
    SELECT JSON_SET(@json, '$.type', 'Dog');

    結果:

    +----------------------------------+
    | JSON_SET(@json, '$.type', 'Dog') |
    +----------------------------------+
    | {"name": "Wag", "type": "Dog"}   |
    +----------------------------------+

    この場合、typeの値を更新しました メンバーCat Dogへ 。

    配列要素

    配列要素を更新または挿入するには、要素のインデックスを指定します。

    SET @json = '
        { 
            "name" : "Wag", 
            "scores" : [8, 0, 9] 
        }
    ';
    
    SELECT JSON_SET(@json, '$.scores[1]', 7);

    結果:

    +--------------------------------------+
    | JSON_SET(@json, '$.scores[1]', 7)    |
    +--------------------------------------+
    | {"name": "Wag", "scores": [8, 7, 9]} |
    +--------------------------------------+

    この場合、2番目の配列要素は新しい値で更新されました。配列はゼロベースであるため、$.scores[1] 配列の2番目の要素を参照します。

    データを挿入

    前の例では、既存のデータを更新しました。新しいデータを挿入する例を次に示します。

    SET @json = '
        { 
            "name" : "Wag", 
            "type" : "Dog" 
        }
    ';
    
    SELECT JSON_SET(@json, '$.weight', 10);

    結果:

    +----------------------------------------------+
    | JSON_SET(@json, '$.weight', 10)              |
    +----------------------------------------------+
    | {"name": "Wag", "type": "Dog", "weight": 10} |
    +----------------------------------------------+

    ここでは、新しいキーと値のペアを挿入しました("weight": 10

    以下は、配列に新しい要素を追加する例です。

    SET @json = '
        { 
            "name" : "Wag", 
            "scores" : [8, 0, 9] 
        }
    ';
    
    SELECT JSON_SET(@json, '$.scores[3]', 7);

    結果:

    +-----------------------------------------+
    | JSON_SET(@json, '$.scores[3]', 7)       |
    +-----------------------------------------+
    | {"name": "Wag", "scores": [8, 0, 9, 7]} |
    +-----------------------------------------+

    この配列の例は、JSON_ARRAY_INSERT()を使用して実行することもできます。 またはJSON_ARRAY_APPEND()

    複数のパス

    この構文では、JSON_SET()を1回呼び出すだけで、複数のパスで値を設定/更新できます。 。

    例:

    SET @json = '
        { 
            "name" : "Scratch", 
            "type" : "Rat"
        }
    ';
    
    SELECT JSON_SET(@json, '$.type', 'Cat', '$.weight', 10);

    結果:

    +--------------------------------------------------+
    | JSON_SET(@json, '$.type', 'Cat', '$.weight', 10) |
    +--------------------------------------------------+
    | {"name": "Scratch", "type": "Cat", "weight": 10} |
    +--------------------------------------------------+

    次の例では、新しい値を配列に挿入し、別の値を更新します。

    SET @json = '{ "scores" : [ 0, 1, 2 ] }';
    
    SELECT 
        JSON_SET(
            @json, 
            '$.scores[1]', "a", 
            '$.scores[3]', "b"
        ) AS Result;

    結果:

    +------------------------------+
    | Result                       |
    +------------------------------+
    | {"scores": [0, "a", 2, "b"]} |
    +------------------------------+

    ヌル引数

    json_docの場合 またはpathのいずれか 引数はnullです 、結果はNULLです 。ただし、value 引数はnullです 、次に値がnullに置き換えられます 。

    SELECT 
        JSON_SET(null, '$.a', 1) AS a,
        JSON_SET('{"a":1}', null, 1) AS b,
        JSON_SET('{"a":1}', '$.a', null) AS c;

    結果:

    +------+------+-------------+
    | a    | b    | c           |
    +------+------+-------------+
    | NULL | NULL | {"a": null} |
    +------+------+-------------+

    次の例では、JSON_SET()への各呼び出しからパス引数の1つが欠落しています。 。どちらの場合も、結果はNULLになります :

    SET @json = '
        { 
            "name" : "Wag", 
            "type" : "Cat" 
        }
    ';
    
    SELECT 
        JSON_SET(@json, null, 'Bark', '$.type', 'Dog') AS a,
        JSON_SET(@json, '$.name', 'Bark', null, 'Dog') AS b;

    結果:

    +------+------+
    | a    | b    |
    +------+------+
    | NULL | NULL |
    +------+------+

    パラメータカウントが正しくありません

    JSON_SET()を呼び出す 引数がないとエラーになります:

    SELECT JSON_SET();

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_SET'

    十分な引数が渡されない場合も同じです:

    SELECT JSON_SET('{"a":1}');

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_SET'

    1. 関係は存在しません

    2. MySQLをSQliteに変換する

    3. RECORDの列をループします

    4. Postgresqlのデータベース照合、Ctypeを変更します