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

JSON_REPLACE()–MySQLのJSONドキュメントの値を置き換える

    MySQLでは、JSON_REPLACE() 関数はJSONドキュメントの値を置き換え、結果を返します。

    最初の引数としてJSONドキュメントを指定し、その後にデータを置き換えるパス、既存の値を置き換える値を指定します。

    必要に応じて、ドキュメント内の複数の場所でデータを置き換えることができます。これを行うには、必要に応じて複数のパスと値のペアを指定するだけです。

    構文

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

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

    json_docの場所 JSONドキュメント、path はデータを置き換えるパスであり、val は、既存の値を置き換える新しい値です。

    パス/値のペアは左から右に評価されます。 1つのペアを評価することによって作成されたドキュメントは、次のペアが評価される新しい値になります。

    パスと値のペアがJSONドキュメントに存在しない場合、それは無視され、効果はありません。

    最初の引数は有効なJSONドキュメントである必要があります。そうでない場合、エラーが発生します。

    また、path 引数は有効なパス式である必要があり、*を含めることはできません または** ワイルドカードを指定しないと、エラーが発生します。

    例1-基本的な使用法

    実例を示します。

    SELECT JSON_REPLACE('{"a": 1, "b": 2, "c": 3}', '$.b', 9) AS 'Result';
    

    結果:

    +--------------------------+
    | Result                   |
    +--------------------------+
    | {"a": 1, "b": 9, "c": 3} |
    +--------------------------+
    

    この場合、bを置き換えました 9のの値 。これは、$.bを指定したためです。 2番目の引数として、9 3番目として。

    別の例を次に示します。

    SELECT 
      JSON_REPLACE('{"Name": "Bart", "Age": 10}', '$.Name', 'Nelson - Ha Ha!') AS 'Result';
    

    結果:

    +----------------------------------------+
    | Result                                 |
    +----------------------------------------+
    | {"Age": 10, "Name": "Nelson - Ha Ha!"} |
    +----------------------------------------+
    

    例2–存在しないパス

    存在しないパスを指定すると、何も削除されません。元のJSONドキュメントは変更なしで返されます。

    SELECT 
      JSON_REPLACE('{"Name": "Homer", "Age": 39}', '$.Gender', 'Male') AS 'Result';
    

    結果:

    +------------------------------+
    | Result                       |
    +------------------------------+
    | {"Age": 39, "Name": "Homer"} |
    +------------------------------+
    

    例3–アレイ

    配列を使用した例を次に示します。

    SELECT JSON_REPLACE('[1, 2, 3]', '$[0]', 9) AS 'Result';
    

    結果:

    +-----------+
    | Result    |
    +-----------+
    | [9, 2, 3] |
    +-----------+
    

    配列はゼロベースの番号付けを使用するため、この場合、最初の要素が置き換えられます。

    別の配列の例を次に示します。今回は、ネストされた配列の値を置き換えます。

    SELECT JSON_REPLACE('[1, 2, [3, 4, 5]]', '$[2][1]', 9) AS 'Result';
    

    結果:

    +-------------------+
    | Result            |
    +-------------------+
    | [1, 2, [3, 9, 5]] |
    +-------------------+
    

    例4–複数のパス

    JSONドキュメント内の複数の場所でデータを置き換えるために、複数のパスを指定できます。

    基本的な例:

    SELECT JSON_REPLACE('[1, 2, 3, 4, 5]', '$[1]', 9, '$[3]', 22) AS 'Result';
    

    結果:

    +------------------+
    | Result           |
    +------------------+
    | [1, 9, 3, 22, 5] |
    +------------------+
    

    例5–より大きなJSONドキュメント

    これは(少し)大きいJSONドキュメントの例です。

    SET @data = '{  
        "Person": {    
           "Name": "Homer", 
           "Age": 39,
           "Hobbies": ["Eating", "Sleeping"]  
        }
     }';
    SELECT JSON_REPLACE(@data, '$.Person.Name', 'Bart', '$.Person.Age', 10, '$.Person.Hobbies[1]', 'Base Jumping') AS 'Result';
    

    結果:

    +--------------------------------------------------------------------------------+
    | Result                                                                         |
    +--------------------------------------------------------------------------------+
    | {"Person": {"Age": 10, "Name": "Bart", "Hobbies": ["Eating", "Base Jumping"]}} |
    +--------------------------------------------------------------------------------+
    

    1. PostgreSQL-制約を無効にする

    2. SQLiteでiif()がどのように機能するか

    3. SQLServer2008-テーブルの制約を取得する

    4. SQLiteで複合キーを自動生成する