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

MariaDB JSON_REPLACE()の説明

    MariaDBでは、JSON_REPLACE() JSONドキュメントの既存の値を置き換えて結果を返す組み込み関数です。

    構文

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

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

    実例を示します。

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

    結果:

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

    この場合、値Catを置き換えました Dogを使用 。

    配列要素

    配列要素を置き換えるには、要素のインデックスを指定します:

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

    結果:

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

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

    複数のパス

    この構文では、複数のパスの値をJSON_REPLACE()への1回の呼び出しで置き換えることができます。 。

    複数のパスを提供する場合、それらは左から右に評価されます。これは、前の評価の結果が次の値として使用されることを意味します。

    まず、キーに基づいてドキュメント内の複数の値を置き換える例を次に示します。

    SET @json = '
        { 
            "name" : "Flutter", 
            "type" : "Bird",
            "weight" : 10
        }
    ';
    
    SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20);

    結果:

    +------------------------------------------------------+
    | JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) |
    +------------------------------------------------------+
    | {"name": "Flutter", "type": "Bat", "weight": 20}     |
    +------------------------------------------------------+

    各値は期待どおりに置き換えられました。

    次の例では、配列内の複数の要素を置き換えます。

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

    結果:

    +------------------------------------+
    | Result                             |
    +------------------------------------+
    | {"scores": [0, 1, "a", 3, "b", 5]} |
    +------------------------------------+

    ヌル引数

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

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

    結果:

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

    次の例では、JSON_REPLACE()への各呼び出しからパス引数の1つが欠落しています。 。これにより、NULLになります 両方の呼び出しで返されます:

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

    結果:

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

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

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

    SELECT JSON_REPLACE();

    結果:

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

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

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

    結果:

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

    同様の機能

    JSON_INSERT() 関数は新しいデータを挿入できます。

    JSON_SET() 関数は、新しいデータを挿入し、既存のデータを更新できます。したがって、JSON_SET() JSON_INSERT()のようなものです およびJSON_REPLACE() 1つの機能で。


    1. ClusterControlを使用してPostgreSQLをDockerコンテナにデプロイする方法

    2. FieldShieldでのプロキシベースの動的データマスキング

    3. CASE ..OracleSQLのWHEN式

    4. OracleでのLIKEを使用したアクセントと大文字と小文字を区別しない照合