sql >> Database teknologi >  >> RDS >> MariaDB

MariaDB JSON_CONTAINS() Forklaret

I MariaDB, JSON_CONTAINS() er en indbygget funktion, der giver dig mulighed for at finde ud af, om en specificeret værdi findes i det givne JSON-dokument eller ved en bestemt sti i dokumentet.

Det returnerer 1 hvis den indeholder værdien, 0 hvis den ikke gør det, og NULL hvis nogen af ​​argumenterne er NULL .

Syntaks

Syntaksen ser sådan ud:

JSON_CONTAINS(json_doc, val[, path])

Hvor json_doc er JSON-dokumentet, val er den værdi, der skal findes, og path en valgfri værdi, der angiver en sti i dokumentet.

Eksempel

Her er et eksempel til at demonstrere.

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

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

Resultat:

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

I dette tilfælde var der et match, og resultatet er 1 .

I det næste eksempel er der ingen match:

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

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

Resultat:

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

Bemærk, at værdien er omgivet af krøllede seler.

Her er, hvad der sker, når det andet argument ikke er gyldigt:

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

SELECT JSON_CONTAINS(@json_document, 'Wag');

Resultat:

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

Lad os se advarslen:

SHOW WARNINGS;

Resultat:

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

Angiv en sti

Du kan valgfrit bruge et tredje argument til at angive en sti.

Eksempel:

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

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

Resultat:

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

Da jeg specificerede en sti, behøvede jeg ikke at bruge krøllede seler.

Her er en, der søger efter en streng:

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

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

Resultat:

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

Bemærk, at jeg brugte dobbelte anførselstegn inde i de enkelte anførselstegn. Hvis jeg udelader de dobbelte anførselstegn, sker der her:

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

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

Resultat:

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

Og lad os tjekke advarslen:

SHOW WARNINGS;

Resultat:

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

Indlejrede strukturer

Her er et eksempel, der leder efter en værdi i et indlejret dokument:

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

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

Resultat:

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

Nul-argumenter

Hvis nogle af argumenterne er NULL , resultatet er 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;

Resultat:

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

Forkert parameterantal

Angivelse af ingen argumenter resulterer i en fejl:

SELECT JSON_CONTAINS();

Resultat:

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

Det er det samme, når du giver for mange argumenter:

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

Resultat:

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

  1. Lær om MySQL Table Level Permissions

  2. Databasenavngivningskonventioner fra Microsoft?

  3. hvordan man ændrer en eksisterende kontrol begrænsning?

  4. SQL-serverlogforsendelse og installation og konfiguration -3