SQL 查找元素在 JSON 数组列中
SQL find elements is in JSON array column
你好,我有一个列 table,其中包含 json 带有标签的数组,我试图找到一种方法来获得 select 结果,其中包含一些值:
ID
标签
1
["test01"]
2
["test02","test03"]
我尝试使用 JSON_QUERY
和 JSON_VALUE()
:
SELECT *
FROM table_tags
WHERE JSON_QUERY(tags,'$') IN ('test01', 'test02')
return 没什么
但在第一个数组元素 [0]
上有 json_value
SELECT *
FROM table_tags
WHERE JSON_VALUE(tags,'$[0]') IN ('test01', 'test02')
它return第一个有test01
ID
标签
1
["test01"]
我需要找到一种方法来遍历 json_value 标签以找到 ('test01', 'test02')
中的所有标签
您需要一个 OPENJSON()
调用来解析存储的 JSON 数组。结果是包含 key
、value
和 type
列的 table,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')
)
你好,我有一个列 table,其中包含 json 带有标签的数组,我试图找到一种方法来获得 select 结果,其中包含一些值:
ID | 标签 |
---|---|
1 | ["test01"] |
2 | ["test02","test03"] |
我尝试使用 JSON_QUERY
和 JSON_VALUE()
:
SELECT *
FROM table_tags
WHERE JSON_QUERY(tags,'$') IN ('test01', 'test02')
return 没什么
但在第一个数组元素 [0]
上有 json_valueSELECT *
FROM table_tags
WHERE JSON_VALUE(tags,'$[0]') IN ('test01', 'test02')
它return第一个有test01
ID | 标签 |
---|---|
1 | ["test01"] |
我需要找到一种方法来遍历 json_value 标签以找到 ('test01', 'test02')
中的所有标签您需要一个 OPENJSON()
调用来解析存储的 JSON 数组。结果是包含 key
、value
和 type
列的 table,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')
)