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

MariaDB JSON_CONTAINS() Vysvětleno

V MariaDB, JSON_CONTAINS() je vestavěná funkce, která umožňuje zjistit, zda je zadaná hodnota nalezena v daném JSON dokumentu, nebo na konkrétní cestě v dokumentu.

Vrací 1 pokud obsahuje hodnotu, 0 pokud tomu tak není, a NULL pokud je některý z argumentů NULL .

Syntaxe

Syntaxe vypadá takto:

JSON_CONTAINS(json_doc, val[, path])

Kde json_doc je dokument JSON, val je hodnota k nalezení a path volitelná hodnota, která určuje cestu v dokumentu.

Příklad

Zde je příklad k demonstraci.

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

SELECT JSON_CONTAINS(@json_document, '{"name": "Wag"}');

Výsledek:

+--------------------------------------------------+
| JSON_CONTAINS(@json_document, '{"name": "Wag"}') |
+--------------------------------------------------+
|                                                1 |
+--------------------------------------------------+

V tomto případě došlo ke shodě a výsledek je 1 .

V dalším příkladu není žádná shoda:

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

SELECT JSON_CONTAINS(@json_document, '{"name": "Woof"}');

Výsledek:

+---------------------------------------------------+
| JSON_CONTAINS(@json_document, '{"name": "Woof"}') |
+---------------------------------------------------+
|                                                 0 |
+---------------------------------------------------+

Všimněte si, že hodnota je uzavřena ve složených závorkách.

Co se stane, když druhý argument není platný:

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

SELECT JSON_CONTAINS(@json_document, 'Wag');

Výsledek:

+--------------------------------------+
| JSON_CONTAINS(@json_document, 'Wag') |
+--------------------------------------+
|                                 NULL |
+--------------------------------------+
1 row in set, 1 warning (0.000 sec)

Podívejme se na varování:

SHOW WARNINGS;

Výsledek:

+---------+------+-----------------------------------------------------------------------------------+
| Level   | Code | Message                                                                           |
+---------+------+-----------------------------------------------------------------------------------+
| Warning | 4038 | Syntax error in JSON text in argument 2 to function 'json_contains' at position 1 |
+---------+------+-----------------------------------------------------------------------------------+

Zadejte cestu

K zadání cesty můžete volitelně použít třetí argument.

Příklad:

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

SELECT JSON_CONTAINS(@json_document, 10, '$.weight');

Výsledek:

+-----------------------------------------------+
| JSON_CONTAINS(@json_document, 10, '$.weight') |
+-----------------------------------------------+
|                                             1 |
+-----------------------------------------------+

Při zadávání cesty jsem nemusel používat složené závorky.

Zde je jeden, který hledá řetězec:

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

SELECT JSON_CONTAINS(@json_document, '"Wag"', '$.name');

Výsledek:

+--------------------------------------------------+
| JSON_CONTAINS(@json_document, '"Wag"', '$.name') |
+--------------------------------------------------+
|                                                1 |
+--------------------------------------------------+

Všimněte si, že jsem uvnitř jednoduchých uvozovek použil dvojité uvozovky. Pokud vynechám dvojité uvozovky, stane se toto:

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

SELECT JSON_CONTAINS(@json_document, 'Wag', '$.name');

Výsledek:

+------------------------------------------------+
| JSON_CONTAINS(@json_document, 'Wag', '$.name') |
+------------------------------------------------+
|                                           NULL |
+------------------------------------------------+
1 row in set, 1 warning (0.000 sec)

A podívejme se na varování:

SHOW WARNINGS;

Výsledek:

+---------+------+-----------------------------------------------------------------------------------+
| Level   | Code | Message                                                                           |
+---------+------+-----------------------------------------------------------------------------------+
| Warning | 4038 | Syntax error in JSON text in argument 2 to function 'json_contains' at position 1 |
+---------+------+-----------------------------------------------------------------------------------+

Vnořené struktury

Zde je příklad, který hledá hodnotu ve vnořeném dokumentu:

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

SELECT JSON_CONTAINS(@json_document, 30, '$.specs.height');

Výsledek:

+-----------------------------------------------------+
| JSON_CONTAINS(@json_document, 30, '$.specs.height') |
+-----------------------------------------------------+
|                                                   1 |
+-----------------------------------------------------+

Nulové argumenty

Pokud je některý z argumentů NULL , výsledkem je NULL :

SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT 
    JSON_CONTAINS(null, 10, '$.weight') AS a,
    JSON_CONTAINS(@json_document, null, '$.weight') AS b,
    JSON_CONTAINS(@json_document, 10, 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();

Výsledek:

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

Je to stejné, když uvedete příliš mnoho argumentů:

SELECT JSON_CONTAINS('{ "a": 1}', 1, 2, 3);

Výsledek:

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

  1. Operátor T-SQL XOR

  2. Oracle:DDL a vrácení transakcí

  3. Pomocí SqlDataAdapter vložit řádek

  4. Instalace RAC pro databázi s datovými soubory