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

MariaDB JSON_LENGTH()の説明

    MariaDBでは、JSON_LENGTH() JSONドキュメントの長さを返す組み込み関数です。

    この関数を呼び出すときは、JSONドキュメントを引数として指定します。ドキュメント内の値の長さを返すパス引数を指定することもできます。

    長さは次のように決定されます:

    • スカラーの長さは常に1です。
    • 配列の場合、配列内の要素の数。
    • オブジェクトの場合、オブジェクト内のメンバーの数。

    ネストされた配列またはオブジェクトの長さはカウントされません。

    構文

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

    JSON_LENGTH(json_doc[, path])

    json_docの場所 はJSONドキュメントであり、path ドキュメント内のパスを指定するオプションの引数です。

    実例を示します。

    SET @json_document = '
        { 
            "name": "Wag", 
            "type": "Dog", 
            "weight": 20 
        }
    ';
    SELECT JSON_LENGTH(@json_document);

    結果:

    +-----------------------------+
    | JSON_LENGTH(@json_document) |
    +-----------------------------+
    |                           3 |
    +-----------------------------+

    パスの指定

    ドキュメント内のパスを指定する例を次に示します。

    SET @json_document = '
        { 
            "_id" : 1, 
            "name" : "Wag", 
            "details" : {
                "type" : "Dog",
                "awards" : { 
                    "Florida Dog Awards" : "Top Dog", 
                    "New York Marathon" : "Fastest Dog", 
                    "Sumo 2020" : "Biggest Dog"
                }
            }
        }
    ';
    SELECT JSON_LENGTH(@json_document, '$.details');

    結果:

    +------------------------------------------+
    | JSON_LENGTH(@json_document, '$.details') |
    +------------------------------------------+
    |                                        2 |
    +------------------------------------------+

    前述のように、ネストされたオブジェクトの長さはカウントされないため、2の結果が得られます。 。

    次の例では、レベルを下げて、awardsの長さをカウントします。 オブジェクト:

    SET @json_document = '
        { 
            "_id" : 1, 
            "name" : "Wag", 
            "details" : {
                "type" : "Dog",
                "awards" : { 
                    "Florida Dog Awards" : "Top Dog", 
                    "New York Marathon" : "Fastest Dog", 
                    "Sumo 2020" : "Biggest Dog"
                }
            }
        }
    ';
    SELECT JSON_LENGTH(@json_document, '$.details.awards');

    結果:

    +-------------------------------------------------+
    | JSON_LENGTH(@json_document, '$.details.awards') |
    +-------------------------------------------------+
    |                                               3 |
    +-------------------------------------------------+

    スカラー

    スカラーの長さは常に1

    SELECT JSON_LENGTH( 
        '{ "a" : 378, "b" : 45 }', 
        '$.a' 
        ) AS Result;

    結果:

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

    配列

    ドキュメントが配列の場合、JSON_LENGTH() 配列内の要素の数をカウントします:

    SET @json_document = '
        { 
            "name": "Wag", 
            "type": "Dog", 
            "scores": [9, 7, 8, 10, 3] 
        }
    ';
    SELECT JSON_LENGTH(@json_document, '$.scores');

    結果:

    +-----------------------------------------+
    | JSON_LENGTH(@json_document, '$.scores') |
    +-----------------------------------------+
    |                                       5 |
    +-----------------------------------------+

    存在しないパス

    JSONドキュメントに存在しないパスを渡すと、NULLになります 。

    例:

    SET @json_document = '
        { 
            "name": "Wag", 
            "type": "Dog"
        }
    ';
    SELECT JSON_LENGTH(@json_document, '$.oops');

    結果:

    +---------------------------------------+
    | JSON_LENGTH(@json_document, '$.oops') |
    +---------------------------------------+
    |                                  NULL |
    +---------------------------------------+

    空のオブジェクト

    選択したオブジェクトが空の場合、結果は0になります。 :

    SELECT JSON_LENGTH('{}');

    結果:

    +-------------------+
    | JSON_LENGTH('{}') |
    +-------------------+
    |                 0 |
    +-------------------+

    ヌル引数

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

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

    結果:

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

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

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

    SELECT JSON_LENGTH();

    結果:

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

    1. SQLServerで重大度の高いエラーに対処する

    2. ツリー階層を取得するためのCTE再帰

    3. T-SQLを使用してSQLServerでユーザー定義のデータ型エイリアスを作成する方法

    4. Oracleストアドプロシージャ:結果セットと出力パラメータの両方を返します