W MySQL funkcja JSON_CONTAINS()
funkcja sprawdza, czy określona wartość znajduje się w danym dokumencie JSON lub, opcjonalnie, w określonej ścieżce w dokumencie.
Jeśli wartość zostanie znaleziona, JSON_CONTAINS()
zwraca 1
, w przeciwnym razie zwraca 0
.
Składnia
Składnia wygląda tak:
JSON_CONTAINS(target, candidate[, path])
Funkcja zwraca 1
lub 0
w zależności od tego, czy dany candidate
Dokument JSON jest zawarty w target
Dokument JSON lub — jeśli path
podano argument — czy kandydat znajduje się na określonej ścieżce w miejscu docelowym.
Przykład 1 – Dwa argumenty
Oto przykład pokazujący podstawowe użycie bez określania ścieżki (tj. Podanie tylko dwóch argumentów).
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '{"c": {"d": 3}}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Wynik:
+--------+ | Result | +--------+ | 1 | +--------+
Zwróć uwagę na nawiasy klamrowe wokół drugiego argumentu. Są one wymagane, aby była poprawna w formacie JSON. Jeśli pominiemy nawiasy klamrowe, otrzymamy błąd:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '"c": {"d": 3}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Wynik:
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.
Przykład 2 – Trzy argumenty
W tym przykładzie dodaję trzeci argument, aby wskazać konkretną ścieżkę, dla której należy znaleźć drugi argument w pierwszym argumencie.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '1'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Wynik:
+--------+ | Result | +--------+ | 1 | +--------+
W tym przypadku drugi argument został znaleziony w pierwszym argumencie w ścieżce określonej przez trzeci argument.
Gdyby nie został znaleziony, skończylibyśmy tak:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '2'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Wynik:
+--------+ | Result | +--------+ | 0 | +--------+
Przykład 3 – Notacja kropkowa
Możesz użyć notacji kropkowej, aby wskazać określone ścieżki w dokumencie JSON.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '3'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;
Wynik:
+--------+ | Result | +--------+ | 1 | +--------+