Di MySQL, JSON_CONTAINS()
fungsi menguji apakah nilai yang ditentukan ditemukan atau tidak dalam dokumen JSON yang diberikan atau, secara opsional, pada jalur yang ditentukan dalam dokumen.
Jika nilai ditemukan, JSON_CONTAINS()
mengembalikan 1
, jika tidak, ia akan mengembalikan 0
.
Sintaks
Sintaksnya seperti ini:
JSON_CONTAINS(target, candidate[, path])
Fungsi mengembalikan 1
atau 0
tergantung pada apakah candidate
yang diberikan Dokumen JSON terkandung dalam target
Dokumen JSON, atau—jika path
argumen diberikan—apakah kandidat ditemukan di jalur tertentu dalam target.
Contoh 1 – Dua Argumen
Berikut adalah contoh untuk mendemonstrasikan penggunaan dasar tanpa menentukan jalur (yaitu hanya menyediakan dua argumen).
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '{"c": {"d": 3}}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Hasil:
+--------+ | Result | +--------+ | 1 | +--------+
Perhatikan kurung kurawal di sekitar argumen kedua. Ini diperlukan untuk membuatnya menjadi JSON yang valid. Jika kita menghilangkan kurung kurawal, kita akan mendapatkan kesalahan:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '"c": {"d": 3}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Hasil:
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.
Contoh 2 – Tiga Argumen
Dalam contoh ini saya menambahkan argumen ketiga, untuk menunjukkan jalur tertentu untuk menemukan argumen kedua dalam argumen pertama.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '1'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Hasil:
+--------+ | Result | +--------+ | 1 | +--------+
Dalam hal ini, argumen kedua ditemukan di argumen pertama di jalur yang ditentukan oleh argumen ketiga.
Jika tidak ditemukan, kami akan berakhir dengan ini:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '2'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Hasil:
+--------+ | Result | +--------+ | 0 | +--------+
Contoh 3 – Notasi Titik
Anda dapat menggunakan notasi titik untuk menunjukkan jalur tertentu dalam dokumen JSON.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '3'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;
Hasil:
+--------+ | Result | +--------+ | 1 | +--------+