#json #sql-server #json-value
#json #sql-сервер #json-значение
Вопрос:
У меня есть таблица с одним столбцом, содержащим объекты типа JSON (тип столбца nvarchar
), и мне требуется фильтровать строки.
Объект JSON — это массив объектов, содержащий несколько полей, есть ли способ применить предложение between к каждому значению массива и вернуть эту строку, если она совпадает.
ROW_1 = [{"key": 12}, {"key": 13}, {"key": 19}]
Для приведенной выше строки, если предложение between имеет диапазон от 15 до 22, то следует выбрать эту строку.
В приведенном выше требовании я вижу две проблемы: 1. использовать подстановочные знаки для выбора всех ключей, а другое — применять предложение between к каждому значению.
Аналогичный вариант использования — выбрать строку, если она соответствует значению, для которого я сделал что-то вроде приведенного ниже
select *
from table
where CAST(JSON_QUERY(column, '
Дайте мне знать, можно ли это сделать с помощью запроса T-SQL.
PS. Другие альтернативы включают загрузку всех данных с помощью python и фильтрацию там. (но меня беспокоит то, что мне нужно будет каждый раз загружать полные данные, что может замедлить фильтрацию из-за увеличения количества строк в будущем).
Комментарии:
1. Что должно быть между
15 to 22
? Любое значение ключа или все значение ключа?2. JSON недопустим (он должен быть
[{"key": 12}, {"key": 13}, {"key": 19}]
).3. @ArunPalanisamy Любое значение ключа
Ответ №1:
Вы можете использовать APPLY
оператор и OPENJSON()
вызов для анализа сохраненного JSON и применения соответствующего WHERE
предложения:
SELECT *
FROM (VALUES (N'[{"key": 12}, {"key": 13}, {"key": 19}]')) v (JsonData)
CROSS APPLY OPENJSON(v.JsonData) WITH ([key] int '$.key') j
WHERE j.[key] BETWEEN 5 AND 12
), nvarchar(max)) LIKE '%"key": 12%'
Дайте мне знать, можно ли это сделать с помощью запроса T-SQL.
PS. Другие альтернативы включают загрузку всех данных с помощью python и фильтрацию там. (но меня беспокоит то, что мне нужно будет каждый раз загружать полные данные, что может замедлить фильтрацию из-за увеличения количества строк в будущем).
Комментарии:
1. Что должно быть между
15 to 22
? Любое значение ключа или все значение ключа?2. JSON недопустим (он должен быть
[{"key": 12}, {"key": 13}, {"key": 19}]
).3. @ArunPalanisamy Любое значение ключа
Ответ №1:
Вы можете использовать APPLY
оператор и OPENJSON()
вызов для анализа сохраненного JSON и применения соответствующего WHERE
предложения: