다음을 통해 공유


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 형식 또는 문자열 값일 수 있습니다.

search_value_expression

지정된 SQL/JSON 문서에서 검색할 SQL 스칼라 값 또는 json 형식 값을 반환하는 식입니다.

경로

JSON 문서의 검색 대상을 지정하는 SQL/JSON 경로입니다. 이 매개 변수는 선택 사항입니다.

변수를 경로 값으로 제공할 수 있습니다. JSON 경로는 구문 분석을 위해 lax 또는 strict 모드를 지정할 수 있습니다. 구문 분석 모드를 지정하지 않으면 lax 모드가 기본값입니다. 자세한 내용은 JSON 경로 식(SQL Server)을 참조하세요.

경로기본값은 .입니다$. 따라서 경로JSON_CONTAINS 값을 제공하지 않으면 전체 JSON 문서에서 값을 검색합니다.

경로의 형식이 유효하지 않으면 JSON_CONTAINS이(가) 오류를 반환합니다.

반환 값

, 0, 또는 1NULL 값을 반환합니다. 값은 1 지정된 검색 값이 대상 JSON 문서 내에 포함되었거나 0 그렇지 않은 경우를 나타냅니다. 함수는 JSON_CONTAINS 인수NULL가 있거나 JSON 문서에서 지정된 SQL/JSON 경로를 찾을 수 없는 경우 반환 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