In MySQL der JSON_CONTAINS()
Die Funktion testet, ob ein bestimmter Wert im angegebenen JSON-Dokument oder optional im angegebenen Pfad innerhalb des Dokuments gefunden wird.
Wenn der Wert gefunden wird, JSON_CONTAINS()
gibt 1
zurück , andernfalls wird 0
zurückgegeben .
Syntax
Die Syntax lautet wie folgt:
JSON_CONTAINS(target, candidate[, path])
Die Funktion gibt 1
zurück oder 0
abhängig davon, ob ein bestimmter candidate
Das JSON-Dokument ist in einem target
enthalten JSON-Dokument oder – falls ein path
Argument angegeben wurde – ob der Kandidat an einem bestimmten Pfad innerhalb des Ziels gefunden wird.
Beispiel 1 – Zwei Argumente
Hier ist ein Beispiel, um die grundlegende Verwendung zu demonstrieren, ohne einen Pfad anzugeben (d. h. nur zwei Argumente anzugeben).
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '{"c": {"d": 3}}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Ergebnis:
+--------+ | Result | +--------+ | 1 | +--------+
Beachten Sie die geschweiften Klammern um das zweite Argument. Diese sind erforderlich, um es zu gültigem JSON zu machen. Wenn wir die geschweiften Klammern weglassen, erhalten wir am Ende einen Fehler:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '"c": {"d": 3}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Ergebnis:
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.
Beispiel 2 – Drei Argumente
In diesem Beispiel füge ich ein drittes Argument hinzu, um einen bestimmten Pfad anzugeben, für den das zweite Argument im ersten Argument zu finden ist.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '1'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Ergebnis:
+--------+ | Result | +--------+ | 1 | +--------+
In diesem Fall wurde das zweite Argument im ersten Argument unter dem durch das dritte Argument angegebenen Pfad gefunden.
Wenn es nicht gefunden wird, erhalten wir Folgendes:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '2'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Ergebnis:
+--------+ | Result | +--------+ | 0 | +--------+
Beispiel 3 – Punktnotation
Sie können die Punktnotation verwenden, um bestimmte Pfade innerhalb des JSON-Dokuments anzugeben.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '3'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;
Ergebnis:
+--------+ | Result | +--------+ | 1 | +--------+