sql >> Databáze >  >> RDS >> MariaDB

MariaDB JSON_CONTAINS_PATH() Vysvětleno

V MariaDB, JSON_CONTAINS_PATH() je vestavěná funkce, která označuje, zda daný dokument JSON obsahuje data na zadané cestě nebo cestách.

Vrací 1 pokud dokument obsahuje data na zadané cestě/s, 0 pokud tomu tak není, a NULL pokud je některý z argumentů NULL .

Syntaxe

Syntaxe vypadá takto:

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

Kde json_doc je dokument JSON a path určuje cestu, pro kterou se mají najít data. Lze poskytnout více cest.

return_arg argument určuje, jak se vypořádat s více cestami. Může to být one nebo all .

  • one – Funkce vrací 1 pokud v dokumentu JSON existuje alespoň jedna cesta.
  • all – Funkce vrací 1 pouze v případě, že v dokumentu JSON existují všechny cesty.

Příklad

Zde je příklad k demonstraci.

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name');

Výsledek:

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

V tomto případě cesta existuje a výsledek je 1 .

V dalším příkladu cesta neexistuje a výsledek je 0 :

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type');

Výsledek:

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

Více cest

Zde je několik příkladů hledání více cest v dokumentu:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.type', 
        '$.weight'
        ) AS Result;

Výsledek:

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

V tomto příkladu jsme hledali dvě cesty. Jedna cesta existuje a druhá ne. Ale máme 1 každopádně (pozitivní výsledek). Je to proto, že jsme použili one jako druhý argument. one určuje, že dostaneme 1 pokud některá z cest existuje.

Co se stane, když použijeme all jako druhý argument:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'all', 
    '$.type', 
    '$.weight'
    ) AS Result;

Výsledek:

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

Tentokrát je výsledek 0 , protože ne všechny cesty existují v dokumentu JSON.

Pokud změníme chybějící cestu ($.type ) k jednomu, který existuje, dostaneme jiný výsledek:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'all', 
    '$.name', 
    '$.weight'
    ) AS Result;

Výsledek:

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

Pole

Zde je příklad, který testuje, zda daný index existuje v poli:

SET @json_document = '
    { 
        "name": "Wag", 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.awards[2]'
        ) AS Result;

Výsledek:

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

A co se stane, když zvýšíme index na neexistující:

SET @json_document = '
    { 
        "name": "Wag", 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.awards[3]'
        ) AS Result;

Výsledek:

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

Vnořené struktury

Zde je příklad, který hledá cestu v rámci vnořeného dokumentu:

SET @json_document = '
    { 
        "name": "Wag", 
        "specs": { 
            "weight": 10, 
            "height": 30 
            } 
    }
';

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'one', 
    '$.specs.height'
    ) AS Result;

Výsledek:

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

Nulové argumenty

Pokud je některý argument NULL , výsledkem je 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;

Výsledek:

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

Nesprávný počet parametrů

Pokud neposkytnete žádné argumenty, dojde k chybě:

SELECT JSON_CONTAINS_PATH();

Výsledek:

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

Totéž se stane, když neprodáte dostatek argumentů:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(@json_document);

Výsledek:

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

  1. Jaké zdroje existují pro ladění výkonu databáze?

  2. Konfigurace Service Broker pro asynchronní zpracování

  3. Jak dotazovat pole jsonb pomocí operátoru IN

  4. ROUND(číslo) Funkce v Oracle