sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB JSON_LENGTH() Förklarad

I MariaDB, JSON_LENGTH() är en inbyggd funktion som returnerar längden på ett JSON-dokument.

När du anropar den här funktionen tillhandahåller du JSON-dokumentet som ett argument. Du kan också ange ett sökvägsargument för att returnera längden på ett värde i dokumentet.

Längden bestäms enligt följande:

  • En skalärs längd är alltid 1.
  • Om en array, antalet element i arrayen.
  • Om ett objekt, antalet medlemmar i objektet.

Längden på kapslade arrayer eller objekt räknas inte.

Syntax

Syntaxen ser ut så här:

JSON_LENGTH(json_doc[, path])

Där json_doc är JSON-dokumentet och path är ett valfritt argument som anger en sökväg i dokumentet.

Exempel

Här är ett exempel att visa.

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

Resultat:

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

Ange en sökväg

Här är ett exempel på hur du anger en sökväg i dokumentet:

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');

Resultat:

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

Som nämnts räknar den inte längden på kapslade objekt, så vi får resultatet av 2 .

Nästa exempel går ner en nivå och räknar längden på awards objekt:

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');

Resultat:

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

Skalärer

En skalärs längd är alltid 1 :

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

Resultat:

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

Arrayer

Om dokumentet är en array, JSON_LENGTH() räknar antalet element i arrayen:

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

Resultat:

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

Icke-existerande vägar

Att skicka en sökväg som inte finns i JSON-dokumentet resulterar i NULL .

Exempel:

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

Resultat:

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

Tömma objekt

Om det valda objektet är tomt är resultatet 0 :

SELECT JSON_LENGTH('{}');

Resultat:

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

Nollargument

Om något argument är NULL , resultatet är NULL :

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

Resultat:

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

Felaktig parameterräkning

Att inte tillhandahålla några argument resulterar i ett fel:

SELECT JSON_LENGTH();

Resultat:

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

  1. Mysql-tillägget är utfasat och kommer att tas bort i framtiden:använd mysqli eller PDO istället

  2. SQL:Använd endast stor bokstav

  3. SQL-prestanda UNION vs OR

  4. vad är materialiserade åsikter i oracle?