SQL Server查询存储JSON数组的nvarchar列无结果,求正确方法
解决SQL Server中JSON数组列的查询问题
你的Col1列存储的是JSON数组(外层有[]包裹),而非单个JSON对象,这就是原查询语句无结果的核心原因。JSON_VALUE的路径$.value.id仅针对单个JSON对象生效,对数组不适用。
方法1:指定数组索引查询(适合数组仅含单个元素的场景)
直接在JSON路径中添加数组索引(数组索引从0开始),修改后的查询语句如下:
SELECT * FROM Tbl1 WHERE JSON_VALUE(Col1, '$[0].value.id') = '123' AND JSON_VALUE(Col1, '$[0].type') = 'Animal'
方法2:用OPENJSON展开数组查询(适合数组含多个元素的场景)
如果数组中可能包含多个对象,想要匹配数组内任意一个符合条件的对象,可通过OPENJSON将JSON数组展开为行,再关联查询:
SELECT t.* FROM Tbl1 t CROSS APPLY OPENJSON(t.Col1) WITH ( value_id NVARCHAR(50) '$.value.id', type NVARCHAR(50) '$.type' ) j WHERE j.value_id = '123' AND j.type = 'Animal'
另外需要说明:SQL Server不支持Col1.value.id = '123'这类简化的JSON查询语法,必须通过JSON_VALUE、OPENJSON等专门的JSON函数处理JSON格式的数据。
内容的提问来源于stack exchange,提问作者user989988
相关产品推荐
相关产品推荐

