MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

MariaDB JSON_CONTAINS() Objaśnienie

W MariaDB JSON_CONTAINS() to wbudowana funkcja, która pozwala dowiedzieć się, czy określona wartość znajduje się w danym dokumencie JSON, czy w określonej ścieżce w dokumencie.

Zwraca 1 jeśli zawiera wartość, 0 jeśli nie, i NULL jeśli którykolwiek z argumentów jest NULL .

Składnia

Składnia wygląda tak:

JSON_CONTAINS(json_doc, val[, path])

Gdzie json_doc jest dokumentem JSON, val to wartość do znalezienia, a path opcjonalna wartość, która określa ścieżkę w dokumencie.

Przykład

Oto przykład do zademonstrowania.

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

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

Wynik:

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

W tym przypadku było dopasowanie, a wynik to 1 .

W następnym przykładzie brak dopasowania:

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

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

Wynik:

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

Zauważ, że wartość jest ujęta w nawiasy klamrowe.

Oto, co się dzieje, gdy drugi argument jest nieprawidłowy:

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

SELECT JSON_CONTAINS(@json_document, 'Wag');

Wynik:

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

Zobaczmy ostrzeżenie:

SHOW WARNINGS;

Wynik:

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

Określ ścieżkę

Możesz opcjonalnie użyć trzeciego argumentu, aby określić ścieżkę.

Przykład:

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

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

Wynik:

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

Określając ścieżkę, nie musiałem używać nawiasów klamrowych.

Oto jedno wyszukiwanie ciągu:

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

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

Wynik:

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

Zauważ, że użyłem podwójnych cudzysłowów wewnątrz pojedynczych cudzysłowów. Jeśli pominę podwójne cudzysłowy, oto co się stanie:

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

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

Wynik:

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

Sprawdźmy ostrzeżenie:

SHOW WARNINGS;

Wynik:

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

Struktury zagnieżdżone

Oto przykład, który szuka wartości w zagnieżdżonym dokumencie:

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

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

Wynik:

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

Argumenty zerowe

Jeśli którykolwiek z argumentów jest NULL , wynik to 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;

Wynik:

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

Nieprawidłowa liczba parametrów

Brak argumentów skutkuje błędem:

SELECT JSON_CONTAINS();

Wynik:

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

Tak samo jest, gdy podajesz zbyt wiele argumentów:

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

Wynik:

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. Wdrożenie w wielu chmurach do replikacji MariaDB przy użyciu WireGuard

  2. Przegląd nowej bazy danych DBaaS firmy MariaDB — SkySQL

  3. MariaDB JSON_EXISTS() Objaśnienie

  4. Jak uzyskać wartości, które nie zawierają liczb w MariaDB?

  5. Porównanie wysokiej dostępności bazy danych — replikacja MySQL/MariaDB i Oracle Data Guard