共用方式為


JSON_CONTAINS (Transact-SQL)

適用於: SQL Server 2025 (17.x) 預覽

在 JSON 檔中的路徑中搜尋 SQL 值。

備註

JSON_CONTAINS 式目前為預覽狀態,僅適用於 SQL Server 2025 (17.x) 預覽版。

Transact-SQL 語法慣例

語法

JSON_CONTAINS( target_expression , search_value_expression [ , path_expression ] )

論點

target_expression

傳回要搜尋之目標 JSON 檔的表達式。 此值可以是 JSON 類型或包含 JSON 檔的字元字串值。

搜尋值表達式

表達式,會傳回 SQL 純量值或 json 類型值,以在指定的 SQL/JSON 檔中搜尋。

路徑

SQL/JSON 路徑,指定 JSON 檔中的搜尋目標。 這是選擇性參數。

您可以提供變數做為 路徑的值。 JSON 路徑可為剖析指定 lax 或 strict 模式。 若您未指定剖析模式,預設會使用 lax 模式。 如需詳細資訊,請參閱 JSON 路徑運算式 (SQL Server)

路徑預設值為 $。 因此,如果您沒有提供 路徑的值, JSON_CONTAINS 請在整個 JSON 檔中搜尋值。

如果 path 的格式無效,則 JSON_CONTAINS 會傳回錯誤。

返回值

傳回 01NULL 值。 的值 1 表示指定的搜尋值包含在目標 JSON 檔中,否則 0 為 。 如果任一自變數為 JSON_CONTAINS,或 JSON 檔中找不到指定的 SQL/JSON 路徑,則函NULL式會傳回 NULL

備註

JSON_CONTAINS 式會遵循下列規則來搜尋 JSON 檔中是否包含值:

  • 純量搜尋值會包含在目標純量中,前提是它們可比較且相等。 因為 json 類型只有 JSON 數位或字串或 true/false 值,因此可以指定為搜尋值的可能 SQL 純量類型僅限於 SQL 數值類型、字元字串類型和 類型。

  • 純量搜尋值的 SQL 類型是用來執行與指定路徑中 json 類型值的比較。 這與以JSON_VALUE為基礎的述詞不同,其中JSON_VALUE函式一律傳回字串值。

  • 只有當搜尋陣列中的每一個元素都包含在目標陣列的一些元素中時,JSON 陣列搜尋值才會包含在目標陣列中。

  • 只有在搜尋值包含在目標陣列的某些元素時,純量搜尋值才會包含在目標陣列中。

  • 如果在目標物件中找到搜尋物件中的每個索引鍵/值,JSON 物件搜尋值才會包含在目標物件中。

局限性

使用 函 JSON_CONTAINS 式有下列限制:

  • json 類型不支援作為搜尋值。
  • 不支援從 JSON_QUERY 傳回的 JSON 物件或數位作為搜尋值。
  • 路徑參數目前是必要的。
  • 如果 SQL/JSON 路徑指向陣列,則在 SQL/JSON 路徑表示式中需要使用通配符。 自動陣列解包目前僅限於第一層。

JSON 索引支援包括 JSON_CONTAINS 述詞和下列運算子:

  • 比較運算子 (=
  • IS [NOT] NULL 謂詞(目前不支援)

範例

A。 在 JSON 路徑中搜尋 SQL 整數值

下列範例示範如何在 JSON 路徑的 JSON 陣列中搜尋 SQL int 值。

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;

結果如下。

is_value_found
--------
1

B. 在 JSON 路徑中搜尋 SQL 字元字串值

下列範例示範如何在 JSON 路徑的 JSON 陣列中搜尋 SQL 字元字串值。

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;

結果如下。

is_value_found
--------
1

C. 搜尋 JSON 路徑中 JSON 陣列的 SQL 位值

下列範例示範如何在 JSON 路徑的 JSON 陣列中搜尋 SQL 位值。

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;

結果如下。

is_value_found
--------
1

D. 搜尋巢狀 JSON 陣列中包含的 SQL 整數值

下列範例示範如何搜尋 JSON 路徑中巢狀 JSON 陣列內含的 SQL int 值。

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;

結果如下。

is_value_found
--------
1

E. 搜尋 JSON 陣列中 JSON 物件中包含的 SQL 整數值

下列範例示範如何搜尋 JSON 路徑中 JSON 陣列中 JSON 物件內含的 SQL int 值。

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

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

結果如下。

is_value_found
--------
1