Mysql
 sql >> Base de données >  >> RDS >> Mysql

JSON_CONTAINS() Exemples dans MySQL

Dans MySQL, le JSON_CONTAINS() La fonction teste si une valeur spécifiée est trouvée ou non dans le document JSON donné ou, éventuellement, au chemin spécifié dans le document.

Si la valeur est trouvée, JSON_CONTAINS() renvoie 1 , sinon il renvoie 0 .

Syntaxe

La syntaxe ressemble à ceci :

JSON_CONTAINS(target, candidate[, path])

La fonction renvoie 1 ou 0 selon qu'un candidate donné Le document JSON est contenu dans une target Document JSON, ou—s'il s'agit d'un path argument a été fourni - si le candidat se trouve à un chemin spécifique dans la cible.

Exemple 1 – Deux arguments

Voici un exemple pour illustrer l'utilisation de base sans spécifier de chemin (c'est-à-dire en fournissant deux arguments uniquement).

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '{"c": {"d": 3}}';
SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;

Résultat :

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

Notez les accolades autour du deuxième argument. Ceux-ci sont nécessaires pour rendre le JSON valide. Si nous omettons les accolades, nous nous retrouverons avec une erreur :

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '"c": {"d": 3}';
SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;

Résultat :

ERROR 3141 (22032): Invalid JSON text in argument 2 to function json_contains: "The document root must not be followed by other values." at position 3.

Exemple 2 – Trois arguments

Dans cet exemple, j'ajoute un troisième argument, pour indiquer un chemin spécifique pour lequel trouver le deuxième argument dans le premier argument.

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '1';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;

Résultat :

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

Dans ce cas, le deuxième argument a été trouvé dans le premier argument au chemin spécifié par le troisième argument.

S'il n'était pas trouvé, nous nous retrouverions avec ceci :

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '2';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;

Résultat :

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

Exemple 3 - Notation par points

Vous pouvez utiliser la notation par points pour indiquer des chemins spécifiques dans le document JSON.

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '3';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;

Résultat :

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