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

MariaDB JSON_MERGE_PATCH()の説明

    MariaDBでは、JSON_MERGE_PATCH() は、2つ以上のJSONドキュメントをマージして結果を返す組み込み関数です。

    JSON_MERGE_PATCH() 関数は、RFC7396に準拠したJSON_MERGE()の代替品です。 非推奨となった関数。

    構文

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

    JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)

    json_docの場所 マージするJSONドキュメントです。

    実例を示します。

    SELECT JSON_MERGE_PATCH('{"name":"Wag"}', '{"type":"Dog"}');

    結果:

    +------------------------------------------------------+
    | JSON_MERGE_PATCH('{"name":"Wag"}', '{"type":"Dog"}') |
    +------------------------------------------------------+
    | {"name": "Wag", "type": "Dog"}                       |
    +------------------------------------------------------+

    2つのドキュメントが1つにマージされていることがわかります。

    3つのドキュメントをマージする例を次に示します。

    SELECT JSON_MERGE_PATCH(
        '{ "name" : "Wag" }', 
        '{ "type" : "Dog" }',
        '{ "score" : [ 9, 7, 8 ] }'
        ) AS Result;

    結果:

    +----------------------------------------------------+
    | Result                                             |
    +----------------------------------------------------+
    | {"name": "Wag", "type": "Dog", "score": [9, 7, 8]} |
    +----------------------------------------------------+

    配列

    JSON_MERGE_PATCH() 関数は配列をマージしません:

    SELECT JSON_MERGE_PATCH(
        '[1,2,3]', 
        '[4,5,6]'
        ) AS Result;

    結果:

    +-----------+
    | Result    |
    +-----------+
    | [4, 5, 6] |
    +-----------+

    これは、(非推奨の)JSON_MERGE()とは対照的です。 関数とその同義語JSON_MERGE_PRESERVE() 、どちらも配列をマージします。

    結果の形式

    JSON_MERGE_PATCH()にお気づきかもしれません 結果のドキュメントにスペースを追加します。これが問題になる場合は、JSON_COMPACT()を使用できます スペースを削除します。

    例:

    SELECT 
        JSON_COMPACT(
            JSON_MERGE_PATCH(
                '{"name":"Wag"}', 
                '{"type":"Dog"}',
                '{"score":[9,7,8]}'
            )
        ) AS Result;

    結果:

    +---------------------------------------------+
    | Result                                      |
    +---------------------------------------------+
    | {"name":"Wag","type":"Dog","score":[9,7,8]} |
    +---------------------------------------------+

    ただし、逆の方法でインデントされた構造などの追加のフォーマットを取得する必要がある場合は、JSON_DETAILED()を試してください。 機能。

    SELECT 
        JSON_DETAILED(
            JSON_MERGE_PATCH(
                '{ "name" : "Wag" }', 
                '{ "type" : "Dog" }',
                '{ "score" : [ 9, 7, 8 ] }'
            )
        ) AS Result;

    結果:

    +---------------------------------------+
    | Result                                |
    +---------------------------------------+
    | {
        "name": "Wag",
        "type": "Dog",
        "score": 
        [
            9,
            7,
            8
        ]
    } |
    +---------------------------------------+

    ヌル引数

    引数がNULLの場合 、結果はNULLです :

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

    結果:

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

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

    引数なしで関数を呼び出すと、エラーが発生します:

    SELECT JSON_MERGE_PATCH();

    結果:

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

    引数を1つだけ指定した場合も同じです:

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

    結果:

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

    1. DatabaseConfigurationAssistantを使用したOracle12cのサンプルスキーマのインストール

    2. android.database.sqlite.SQLiteCantOpenDatabaseException:不明なエラー(コード14):データベースを開くことができませんでした

    3. SQL Serverのデフォルトの制約名は何ですか?

    4. 重複キーで無視しますか?