Aracılığıyla paylaş


JSON_CONTAINS (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2025 (17.x) Önizlemesi

JSON belgesindeki bir yolda SQL değeri arar.

Uyarı

İşlev JSON_CONTAINS şu anda önizleme aşamasındadır ve yalnızca SQL Server 2025 (17.x) Önizleme sürümünde kullanılabilir.

Transact-SQL söz dizimi kuralları

Sözdizimi

JSON_CONTAINS( target_expression , search_value_expression [ , path_expression ] )

Tartışmalar

target_expression

Aranacak hedef JSON belgesini döndüren ifade. Değer, JSON belgesi içeren bir json türü veya karakter dizesi değeri olabilir.

arama_değer_ifadesi

Belirtilen SQL/JSON belgesinde aramak için SQL skaler değeri veya json türü değeri döndüren ifade.

yol

JSON belgesindeki arama hedefini belirten bir SQL/JSON yolu. Bu parametre isteğe bağlıdır.

Bir değişkeni yol değeri olarak sağlayabilirsiniz. JSON yolu ayrıştırma için gevşek veya katı mod belirtebilir. Ayrıştırma modunu belirtmezseniz, lax modu varsayılandır. Daha fazla bilgi için bkz. JSON Yol İfadeleri (SQL Server).

Yol için varsayılan değer şeklindedir$. Sonuç olarak, yol için bir değer sağlamazsanız JSON JSON_CONTAINS belgesinin tamamında değeri arar.

Yol biçimi geçerli değilse bir JSON_CONTAINS hata döndürür.

Dönüş değeri

Bir int değeri olarak 0, 1 veya NULL döndürür. değeri 1 , belirtilen arama değerinin hedef JSON belgesinde veya 0 başka bir şekilde bulunduğunu gösterir. İşlev, JSON_CONTAINS bağımsız değişkenlerinden herhangi biri NULL ise veya belirtilen SQL/JSON yolu JSON belgesinde bulunamazsa, NULL değerini döndürür.

Açıklamalar

İşlev, JSON_CONTAINS JSON belgesinde bir değer olup olmadığını aramak için şu kuralları izler:

  • Skaler arama değeri, yalnızca karşılaştırılabilirse ve eşitse hedef skaler içinde yer alır. JSON türlerinin yalnızca JSON numarası veya dizesi veya true/false değeri olduğundan, arama değeri olarak belirtilebilen olası SQL skaler türleri SQL sayısal türleri, karakter dizesi türleri ve bit türüyle sınırlıdır.

  • Skaler arama değerinin SQL türü, belirtilen yolda json türü değeriyle karşılaştırma yapmak için kullanılır. Bu, JSON_VALUE işlevinin her zaman bir karakter dizesi değeri döndürdüğü JSON_VALUE tabanlı koşuldan farklıdır.

  • Bir JSON dizisi arama değeri, yalnızca arama dizisindeki her öğe hedef dizinin bir öğesinde yer alırsa hedef dizide yer alır.

  • Bir skaler arama değeri, yalnızca arama değeri hedef dizinin bir öğesinde yer alıyorsa hedef dizide bulunur.

  • Bir JSON nesnesi arama değeri, yalnızca arama nesnesindeki her anahtar/değer hedef nesnede bulunursa hedef nesnede yer alır.

Sınırlamalar

işlevinin JSON_CONTAINS kullanılması aşağıdaki sınırlamalara sahiptir:

  • Json türü arama değeri olarak desteklenmez.
  • öğesinden JSON_QUERY döndürülen JSON nesnesi veya dizisi arama değeri olarak desteklenmez.
  • Path parametresi şu anda gereklidir.
  • SQL/JSON yolu bir diziyi işaret ederse, SQL/JSON yol ifadesinde joker karakter gerekir. Otomatik dizi eşlemesi şu anda yalnızca ilk düzeydedir.

JSON dizin desteği koşulunu JSON_CONTAINS ve aşağıdaki işleçleri içerir:

  • Karşılaştırma işleçleri (=)
  • IS [NOT] NULL koşul (şu anda desteklenmiyor)

Örnekler

A. SQL tamsayı değerini bir JSON yolunda arama

Aşağıdaki örnekte, JSON yolundaki bir JSON dizisinde SQL int değerinin nasıl aranacakları gösterilmektedir.

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;

Sonuç kümesi aşağıdadır.

is_value_found
--------
1

B. JSON yolunda bir SQL karakter dizesi değeri arama

Aşağıdaki örnekte, JSON yolundaki bir JSON dizisinde SQL karakter dizesi değerinin nasıl arandığı gösterilmektedir.

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;

Sonuç kümesi aşağıdadır.

is_value_found
--------
1

C. JSON yolundaki bir JSON dizisinde SQL bit değeri arama

Aşağıdaki örnekte, JSON yolundaki bir JSON dizisinde sql bit değerinin nasıl aranacak olduğu gösterilmektedir.

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;

Sonuç kümesi aşağıdadır.

is_value_found
--------
1

D. İç içe JSON dizisinin içinde yer alan sql tamsayı değerini arama

Aşağıdaki örnekte, bir JSON yolunda iç içe JSON dizisi içinde yer alan bir SQL int değerinin nasıl aranacakları gösterilmektedir.

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;

Sonuç kümesi aşağıdadır.

is_value_found
--------
1

E. JSON dizisindeki bir JSON nesnesinin içinde yer alan SQL tamsayı değerini arama

Aşağıdaki örnekte, JSON yolundaki bir JSON dizisindeki JSON nesnesi içinde yer alan bir SQL int değerinin nasıl aranacakları gösterilmektedir.

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

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

Sonuç kümesi aşağıdadır.

is_value_found
--------
1