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 | +--------+