MariaDB
 sql >> база данни >  >> RDS >> MariaDB

MariaDB JSON_CONTAINS() Обяснено

В MariaDB, JSON_CONTAINS() е вградена функция, която ви позволява да разберете дали определена стойност е намерена в дадения JSON документ или на определен път в документа.

Връща 1 ако съдържа стойността, 0 ако не е така, и NULL ако някой от аргументите е NULL .

Синтаксис

Синтаксисът е така:

JSON_CONTAINS(json_doc, val[, path])

Където json_doc е JSON документът, val е стойността за намиране и path незадължителна стойност, която определя път в документа.

Пример

Ето пример за демонстрация.

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

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

Резултат:

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

В този случай имаше съвпадение и резултатът е 1 .

В следващия пример няма съвпадение:

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

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

Резултат:

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

Имайте предвид, че стойността е затворена в къдрави скоби.

Ето какво се случва, когато вторият аргумент не е валиден:

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

SELECT JSON_CONTAINS(@json_document, 'Wag');

Резултат:

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

Нека видим предупреждението:

SHOW WARNINGS;

Резултат:

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

Посочете път

По избор можете да използвате трети аргумент, за да посочите път.

Пример:

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

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

Резултат:

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

Когато посочвах път, не трябваше да използвам къдрави скоби.

Ето един, който търси низ:

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

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

Резултат:

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

Забележете, че използвах двойни кавички в единичните кавички. Ако пропусна двойните кавички, ето какво се случва:

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

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

Резултат:

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

И нека проверим предупреждението:

SHOW WARNINGS;

Резултат:

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

Вложени структури

Ето пример, който търси стойност във вложен документ:

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

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

Резултат:

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

Нулеви аргументи

Ако някой от аргументите е NULL , резултатът е 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;

Резултат:

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

Неправилен брой параметри

Предоставянето на без аргументи води до грешка:

SELECT JSON_CONTAINS();

Резултат:

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

Същото е, когато предоставите твърде много аргументи:

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

Резултат:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Трансформационни истории на конференцията MariaDB OpenWorks

  2. Използвайте mycli и научете MariaDB/MySQL удобно в терминал!

  3. Как работи MAKETIME() в MariaDB

  4. MariaDB JSON_CONTAINS() Обяснено

  5. 3 начина да покажете съпоставянето за вашата връзка в MariaDB