问题描述
您好,我有一个列表,其中包含带有标签的 json 数组,我尝试找到一种方法来选择其中包含某些值的结果:
ID | 标签 |
---|---|
1 | ["test01"] |
2 | ["test02","test03"] |
我尝试使用 JSON_QUERY
AND JSON_VALUE()
:
SELECT *
FROM table_tags
WHERE JSON_QUERY(tags,'$') IN ('test01','test02')
什么都不返回
但是在第一个数组元素 [0] 上带有 json_value
SELECT *
FROM table_tags
WHERE JSON_VALUE(tags,'$[0]') IN ('test01','test02')
它用 test01 返回第一个
ID | 标签 |
---|---|
1 | ["test01"] |
我需要找到一种方法来遍历 json_value 标签以查找 ('test01','test02') 中的所有标签
解决方法
您需要调用 OPENJSON()
来解析存储的 JSON 数组。结果是一个包含 key
、value
和 type
列的表,value
列中是解析的 JSON 数组中的每个元素。列数据类型为 nvarchar(max)
,具有与 tags
列排序规则相同的排序规则。
SELECT *
FROM (VALUES
(1,'["test01"]'),(2,'["test02","test03"]')
) table_tags (id,tags)
WHERE EXISTS (
SELECT 1 FROM OPENJSON(tags) WHERE [value] IN ('test01','test02')
)