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

MariaDB JSON_CONTAINS_PATH()の説明

    MariaDBでは、JSON_CONTAINS_PATH() は、特定のJSONドキュメントに指定されたパスにデータが含まれているかどうかを示す組み込み関数です。

    1を返します ドキュメントに指定されたパス/秒のデータが含まれている場合、0 そうでない場合は、NULL 引数のいずれかがNULLの場合 。

    構文

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

    JSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...)

    json_docの場所 JSONドキュメントとpath データを検索するパスを指定します。複数のパスを提供できます。

    return_arg 引数は、複数のパスを処理する方法を決定します。 oneにすることができます またはall

    • one –関数は1を返します JSONドキュメント内に少なくとも1つのパスが存在する場合。
    • all –関数は1を返します すべてのパスがJSONドキュメント内に存在する場合のみ。

    実例を示します。

    SET @json_document = '{ "name": "Wag", "weight": 10 }';
    
    SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name');

    結果:

    +-----------------------------------------------------+
    | JSON_CONTAINS_PATH(@json_document, 'one', '$.name') |
    +-----------------------------------------------------+
    |                                                   1 |
    +-----------------------------------------------------+

    この場合、パスが存在し、結果は1になります。 。

    次の例では、パスが存在せず、結果は0になります。 :

    SET @json_document = '{ "name": "Wag", "weight": 10 }';
    
    SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type');

    結果:

    +-----------------------------------------------------+
    | JSON_CONTAINS_PATH(@json_document, 'one', '$.type') |
    +-----------------------------------------------------+
    |                                                   0 |
    +-----------------------------------------------------+

    複数のパス

    ドキュメント内の複数のパスを検索する例を次に示します。

    SET @json_document = '{ "name": "Wag", "weight": 10 }';
    
    SELECT JSON_CONTAINS_PATH(
            @json_document, 
            'one', 
            '$.type', 
            '$.weight'
            ) AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |      1 |
    +--------+

    この例では、2つのパスを検索しました。一方のパスは存在し、もう一方は存在しません。しかし、1を取得しました とにかく(肯定的な結果)。これは、oneを使用したためです 2番目の引数として。 one 1を取得することを指定します パスのいずれかが存在する場合。

    allを使用するとどうなりますか 2番目の引数として:

    SET @json_document = '{ "name": "Wag", "weight": 10 }';
    
    SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'all', 
        '$.type', 
        '$.weight'
        ) AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |      0 |
    +--------+

    今回の結果は0です。 、JSONドキュメントにすべてのパスが存在するわけではないためです。

    欠落しているパス($.type)を変更した場合 )存在するものとは異なる結果が得られます:

    SET @json_document = '{ "name": "Wag", "weight": 10 }';
    
    SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'all', 
        '$.name', 
        '$.weight'
        ) AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |      1 |
    +--------+

    配列

    特定のインデックスが配列内に存在するかどうかをテストする例を次に示します。

    SET @json_document = '
        { 
            "name": "Wag", 
            "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
        }
    ';
    
    SELECT JSON_CONTAINS_PATH(
            @json_document, 
            'one', 
            '$.awards[2]'
            ) AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |      1 |
    +--------+

    インデックスを存在しないものに増やすと、次のようになります。

    SET @json_document = '
        { 
            "name": "Wag", 
            "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
        }
    ';
    
    SELECT JSON_CONTAINS_PATH(
            @json_document, 
            'one', 
            '$.awards[3]'
            ) AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |      0 |
    +--------+

    ネストされた構造

    ネストされたドキュメント内のパスを検索する例を次に示します。

    SET @json_document = '
        { 
            "name": "Wag", 
            "specs": { 
                "weight": 10, 
                "height": 30 
                } 
        }
    ';
    
    SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.specs.height'
        ) AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |      1 |
    +--------+

    ヌル引数

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

    SET @json_document = '{ "name": "Wag", "weight": 10 }';
    SELECT 
        JSON_CONTAINS_PATH(null, 'one', '$.weight') AS a,
        JSON_CONTAINS_PATH(@json_document, null, '$.weight') AS b,
        JSON_CONTAINS_PATH(@json_document, 'one', null) AS c;

    結果:

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

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

    引数を指定しないとエラーが発生します:

    SELECT JSON_CONTAINS_PATH();

    結果:

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

    十分な引数を渡さない場合も同じことが起こります:

    SET @json_document = '{ "name": "Wag", "weight": 10 }';
    
    SELECT JSON_CONTAINS_PATH(@json_document);

    結果:

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

    1. Oracle SQL WHERE句で(+)記号はどういう意味ですか?

    2. 不動産の専​​門家がMicrosoftAccessを使用する方法

    3. 2つの日付の間の金曜日の数

    4. SQLServerで結果をページ分割するための最良の方法は何ですか