Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: SQL Server 2025 (17.x)
Выполняет поиск значения SQL в JSON-документе по заданному пути.
Note
Функция сейчас находится в предварительном просмотре и доступна JSON_CONTAINS только в SQL Server 2025 (17.x).
Соглашения о синтаксисе Transact-SQL
Syntax
JSON_CONTAINS( target_expression , search_value_expression [ , path_expression ] [ , search_mode ] )
Arguments
target_expression
Выражение, возвращающее целевой документ JSON для поиска. Это значение может быть типом json или строковым значением символа, содержащим документ JSON.
search_value_expression
Выражение, возвращающее скалярное значение SQL или значение типа JSON для поиска в указанном документе SQL/JSON.
path
SQL/JSON путь, указывающий цель поиска в документе JSON. Это необязательный параметр.
Можно указать переменную в качестве значения пути. В пути JSON можно указать режим синтаксического анализа: нестрогий или строгий режим. Если режим анализа не указан явно, по умолчанию используется нестрогий режим. Дополнительные сведения см. в разделе "Выражения пути JSON" в ядре СУБД SQL.
Значением по умолчанию для пути является $. В результате, если вы не предоставляете значение для пути, JSON_CONTAINS выполняется поиск значения во всем документе JSON.
Если формат пути недействителен, JSON_CONTAINS возвращает ошибку.
search_mode
Указывает, должен ли режим поиска для значения использовать семантику равенства или предиката LIKE. Этот параметр применяется только в том случае, если search_value_expression является символьным строковым значением. Значение по умолчанию для search_mode равно 0, указывающее семантику предиката равенства. Если значение search_mode равно 1, то оно указывает, что следует использовать семантику предиката LIKE.
Возвращаемое значение
Возвращает целое значение 0, 1, или NULL. Значение 1 указывает, что указанное значение поиска содержится в целевом документе JSON или в 0 противном случае. Функция JSON_CONTAINS возвращается NULL , если какой-либо из аргументов имеет NULLзначение, или если указанный путь SQL/JSON не найден в документе JSON.
Remarks
Функция JSON_CONTAINS следует этим правилам для поиска значения, содержащегося в документе JSON:
Скалярное значение поиска содержится в целевом скаляре, если и только в том случае, если они сопоставимы и равны. Так как типы JSON имеют только число JSON или строковое или значение true/false, возможные скалярные типы SQL, которые можно указать в качестве значения поиска, ограничены числовыми типами SQL, типами строк символов и битовым типом.
Тип SQL скалярного поискового значения используется для сравнения со значением типа JSON в указанном пути. Это отличается от предиката, основанного на
JSON_VALUE, где функцияJSON_VALUEвсегда возвращает символьное строковое значение.Значение поиска массива JSON содержится в целевом массиве, если каждый элемент в массиве поиска содержится в определенном элементе целевого массива.
Скалярное значение поиска содержится в целевом массиве, если и только если значение поиска содержится в определенном элементе целевого массива.
Значение поиска объекта JSON содержится в целевом объекте, если и только если каждый ключ или значение в объекте поиска найден в целевом объекте.
Limitations
JSON_CONTAINS Использование функции имеет следующие ограничения:
- Тип json не поддерживается в качестве значения поиска.
- Объект JSON или массив, возвращаемый из
JSON_QUERY, не поддерживается в качестве значения поиска. - В настоящее время требуется параметр пути.
- Если путь SQL/JSON указывает на массив, то в выражении пути SQL/JSON требуется подстановочный знак. Автоматическая распаковка массивов в настоящее время выполняется только на первом уровне.
Поддержка индекса JSON включает JSON_CONTAINS предикат и следующие операторы:
- Операторы сравнения (
=) -
IS [NOT] NULLпредикат (в настоящее время не поддерживается)
Examples
A. Поиск целочисленного значения SQL в пути JSON
В следующем примере показано, как искать значение int SQL в массиве JSON в пути 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;
Вот результат.
is_value_found
--------
1
B. Поиск значения строки символа SQL в пути JSON
В следующем примере показано, как искать строковое значение SQL в массиве JSON, используя путь 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;
Вот результат.
is_value_found
--------
1
C. Поиск битового значения SQL в JSON-массиве по JSON-пути
В следующем примере показано, как выполнить поиск битового значения SQL в массиве JSON в пути 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;
Вот результат.
is_value_found
--------
1
D. Поиск целочисленного значения SQL, содержащегося в вложенном массиве JSON
В следующем примере показано, как выполнить поиск значения SQL int, содержащегося во вложенном массиве JSON в пути 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;
Вот результат.
is_value_found
--------
1
E. Поиск целочисленного значения SQL, содержащегося в объекте JSON в массиве JSON
В следующем примере показано, как искать значение SQL int, содержащееся в объекте JSON внутри массива JSON на пути JSON.
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
F. Поиск значения строки символа SQL в пути JSON с помощью шаблона подстановочного знака
В следующем примере показано, как искать строковое значение символа SQL с помощью шаблона в массиве JSON в пути 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;
Вот результат.
is_value_found
--------
1