Mysql
 sql >> Datenbank >  >> RDS >> Mysql

JSON_CONTAINS() Beispiele in MySQL

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