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

SQLiteのJSON_INSERT()とJSON_SET()とJSON_REPLACE()

    SQLiteは、JSONドキュメントの値を挿入、設定、および置換するためのいくつかの関数を提供します。具体的には、json_insert()を提供します 、json_set() 、およびjson_replace()

    これらの関数は同様のタスクを実行し、特定のポイントまで互換的に使用できる場合があります。

    しかし、各機能には間違いなく明確な違いがあります。

    違い

    次の表に、これらの機能の違いの概要を示します。

    関数 すでに存在する場合は上書きしますか? 存在しない場合は作成しますか?
    json_insert() いいえ はい
    json_replace() はい いいえ
    json_set() はい はい

    したがって、これらの関数の違いは、存在するキー/値と存在しないキー/値を処理する方法にあります。

    各関数が存在するキー/値と存在しないキー/値をどのように処理するかを示す簡単な例を次に示します。

    キーがすでに存在する場合

    各関数が既存のキーの更新をどのように処理するかを次に示します。

    SELECT 
        json_insert('{ "a" : 1 }', '$.a', 2) AS json_insert,
        json_replace('{ "a" : 1 }', '$.a', 2) AS json_replace,
        json_set('{ "a" : 1 }', '$.a', 2) AS json_set;

    結果:

    +-------------+--------------+----------+
    | json_insert | json_replace | json_set |
    +-------------+--------------+----------+
    | {"a":1}     | {"a":2}      | {"a":2}  |
    +-------------+--------------+----------+

    json_insert()であることがわかります 何も更新しませんでしたが、他の2つの機能は更新しました。

    アレイでも同様です:

    SELECT 
        json_insert('[ 1, 2, 3 ]', '$[1]', 4) AS json_insert,
        json_replace('[ 1, 2, 3 ]', '$[1]', 4) AS json_replace,
        json_set('[ 1, 2, 3 ]', '$[1]', 4) AS json_set;

    結果:

    +-------------+--------------+----------+
    | json_insert | json_replace | json_set |
    +-------------+--------------+----------+
    | [1,2,3]     | [1,4,3]      | [1,4,3]  |
    +-------------+--------------+----------+

    キーが存在しない場合

    キーが存在しない場合は次のようになります。

    SELECT 
        json_insert('{ "a" : 1 }', '$.b', 2) AS json_insert,
        json_replace('{ "a" : 1 }', '$.b', 2) AS json_replace,
        json_set('{ "a" : 1 }', '$.b', 2) AS json_set;

    結果:

    +---------------+--------------+---------------+
    |  json_insert  | json_replace |   json_set    |
    +---------------+--------------+---------------+
    | {"a":1,"b":2} | {"a":1}      | {"a":1,"b":2} |
    +---------------+--------------+---------------+

    json_replace()であることがわかります 新しいキーと値のペアを挿入しませんでしたが、他の2つの関数は挿入しました。

    配列についても同じです:

    SELECT 
        json_insert('[ 1, 2, 3 ]', '$[3]', 4) AS json_insert,
        json_replace('[ 1, 2, 3 ]', '$[3]', 4) AS json_replace,
        json_set('[ 1, 2, 3 ]', '$[3]', 4) AS json_set;

    結果:

    +-------------+--------------+-----------+
    | json_insert | json_replace | json_set  |
    +-------------+--------------+-----------+
    | [1,2,3,4]   | [1,2,3]      | [1,2,3,4] |
    +-------------+--------------+-----------+

    これは、[#]を使用して行うこともできます パス:

    SELECT 
        json_insert('[ 1, 2, 3 ]', '$[#]', 4) AS json_insert,
        json_replace('[ 1, 2, 3 ]', '$[#]', 4) AS json_replace,
        json_set('[ 1, 2, 3 ]', '$[#]', 4) AS json_set;

    結果:

    +-------------+--------------+-----------+
    | json_insert | json_replace | json_set  |
    +-------------+--------------+-----------+
    | [1,2,3,4]   | [1,2,3]      | [1,2,3,4] |
    +-------------+--------------+-----------+

    [#]を使用する利点の1つ つまり、配列にすでに含まれている要素の数を知る必要はありません。


    1. ハイブリッドクラウドにデプロイされたGaleraクラスターのディザスタリカバリ

    2. MySQLmy.cnfファイルを編集する方法

    3. Oracleデータベースのバックアップ:バックアップの種類とバックアップ戦略

    4. OracleCloudのMAAドキュメント