Bagikan melalui


JSON_CONTAINS (Transact-SQL)

Berlaku untuk: SQL Server 2025 (17.x)

Mencari nilai SQL dalam jalur dalam dokumen JSON.

Note

Fungsi ini JSON_CONTAINS saat ini dalam pratinjau dan hanya tersedia di SQL Server 2025 (17.x).

Konvensi sintaks Transact-SQL

Syntax

JSON_CONTAINS( target_expression , search_value_expression [ , path_expression ]  [ , search_mode ] )

Arguments

target_expression

Ekspresi yang mengembalikan dokumen JSON target untuk dicari. Nilainya bisa berupa jenis json atau nilai string karakter yang berisi dokumen JSON.

search_value_expression

Ekspresi yang mengembalikan nilai skalar SQL atau nilai jenis json untuk dicari dalam dokumen SQL/JSON yang ditentukan.

path

Jalur SQL/JSON yang menentukan target pencarian dalam dokumen JSON. Parameter ini bersifat opsional.

Anda dapat memberikan variabel sebagai nilai jalur. Jalur JSON dapat menentukan mode laks atau ketat untuk penguraian. Jika Anda tidak menentukan mode penguraian, mode lax adalah default. Untuk informasi selengkapnya, lihat Ekspresi Jalur JSON di Mesin Database SQL.

Nilai default untuk jalur adalah $. Akibatnya, jika Anda tidak memberikan nilai untuk jalur, JSON_CONTAINS cari nilai di seluruh dokumen JSON.

Jika format jalur tidak valid, JSON_CONTAINS mengembalikan kesalahan.

search_mode

Menunjukkan apakah mode pencarian untuk nilai harus menggunakan kesetaraan atau semantik predikat LIKE. Parameter ini hanya berlaku ketika search_value_expression adalah nilai string karakter. Nilai default untuk search_mode adalah 0, yang menunjukkan semantik predikat kesetaraan. Jika search_mode adalah 1, maka menunjukkan bahwa semantik predikat LIKE harus digunakan.

Mengembalikan nilai

Mengembalikan nilai int dari 0, , 1atau NULL. Nilai 1 menunjukkan bahwa nilai pencarian yang ditentukan terkandung dalam dokumen JSON target, atau 0 sebaliknya. Fungsi mengembalikan JSON_CONTAINSNULL jika salah satu argumen adalah NULL, atau jika jalur SQL/JSON yang ditentukan tidak ditemukan dalam dokumen JSON.

Remarks

Fungsi ini JSON_CONTAINS mengikuti aturan ini untuk mencari apakah nilai terkandung dalam dokumen JSON:

  • Nilai pencarian skalar terkandung dalam skalar target jika dan hanya jika sebanding dan sama. Karena jenis json hanya memiliki angka atau string JSON atau nilai true/false, kemungkinan jenis skalar SQL yang dapat ditentukan karena nilai pencarian terbatas pada jenis numerik SQL, jenis string karakter, dan jenis bit .

  • Jenis SQL dari nilai pencarian skalar digunakan untuk melakukan perbandingan dengan nilai jenis json di jalur yang ditentukan. Ini berbeda dari predikat berbasis JSON_VALUE di mana fungsi JSON_VALUE selalu mengembalikan nilai string karakter.

  • Nilai pencarian array JSON terkandung dalam array target jika dan hanya jika setiap elemen dalam array pencarian terkandung dalam beberapa elemen array target.

  • Nilai pencarian skalar terkandung dalam array target jika dan hanya jika nilai pencarian terkandung dalam beberapa elemen array target.

  • Nilai pencarian objek JSON terkandung dalam objek target jika dan hanya jika setiap kunci/nilai dalam objek pencarian ditemukan di objek target.

Limitations

Penggunaan fungsi JSON_CONTAINS memiliki batasan sebagai berikut:

  • Jenis json tidak didukung sebagai nilai pencarian.
  • Objek JSON atau array yang berasal dari JSON_QUERY tidak didukung sebagai nilai pencarian.
  • Parameter jalur diperlukan saat ini.
  • Jika jalur SQL/JSON menunjuk ke array, karakter pengganti diperlukan dalam ekspresi jalur SQL/JSON. Pelepasan array otomatis saat ini hanya pada tingkat pertama.

Dukungan indeks JSON mencakup JSON_CONTAINS predikat dan operator berikut:

  • Operator perbandingan (=)
  • IS [NOT] NULL predikat (saat ini tidak didukung)

Examples

A. Mencari nilai bilangan bulat SQL di jalur JSON

Contoh berikut menunjukkan cara mencari nilai int SQL dalam array JSON di jalur JSON.

DECLARE @j AS JSON = '{"a": 1, "b": 2, "c": {"d": 4, "ce":["dd"]}, "d": [1, 3, {"df": [89]}, false], "e":null, "f":true}';

SELECT json_contains(@j, 1, '$.a') AS is_value_found;

Berikut kumpulan hasilnya.

is_value_found
--------
1

B. Mencari nilai string karakter SQL di jalur JSON

Contoh berikut menunjukkan cara mencari nilai string karakter SQL dalam array JSON di jalur JSON.

DECLARE @j AS JSON = '{"a": 1, "b": 2, "c": {"d": 4, "ce":["dd"]}, "d": [1, 3, {"df": [89]}, false], "e":null, "f":true}';

SELECT json_contains(@j, 'dd', '$.c.ce[*]') AS is_value_found;

Berikut kumpulan hasilnya.

is_value_found
--------
1

C. Mencari nilai bit SQL dalam array JSON di jalur JSON

Contoh berikut menunjukkan cara mencari nilai bit sql dalam array JSON di jalur JSON.

DECLARE @j AS JSON = '{"a": 1, "b": 2, "c": {"d": 4, "ce":["dd"]}, "d": [1, 3, {"df": [89]}, false], "e":null, "f":true}';

SELECT json_contains(@j, CAST (0 AS BIT), '$.d[*]') AS is_value_found;

Berikut kumpulan hasilnya.

is_value_found
--------
1

D. Mencari nilai bilangan bulat SQL yang terkandung dalam array JSON berlapis

Contoh berikut menunjukkan cara mencari nilai int SQL yang terkandung dalam array JSON berlapis di jalur JSON.

DECLARE @j AS JSON = '{"a": 1, "b": 2, "c": {"d": 4, "ce":["dd"]}, "d": [1, 3, {"df": [89]}, false], "e":null, "f":true}';

SELECT json_contains(@j, 89, '$.d[*].df[*]') AS is_value_found;

Berikut kumpulan hasilnya.

is_value_found
--------
1

E. Mencari nilai bilangan bulat SQL yang terkandung dalam objek JSON dalam array JSON

Contoh berikut menunjukkan cara mencari nilai int SQL yang terkandung dalam objek JSON dalam array JSON di jalur JSON.

DECLARE @j AS JSON = '[{"a": 1}, {"b": 2}, {"c": 3}, {"a": 56}]';

SELECT json_contains(@j, 56, '$[*].a') AS is_value_found;

Berikut kumpulan hasilnya.

is_value_found
--------
1

F. Mencari nilai string karakter SQL di jalur JSON menggunakan pola kartubebas

Contoh berikut menunjukkan cara mencari nilai string karakter SQL menggunakan pola dalam array JSON di jalur JSON.

DECLARE @j AS JSON = '{"a": 1, "b": 2, "c": {"d": 4, "ce":["dd"]}, "d": [1, 3, {"df": [89]}, false], "e":null, "f":true}';

SELECT json_contains(@j, 'dd', '$.c.ce[*]') AS is_value_found;

Berikut kumpulan hasilnya.

is_value_found
--------
1