SQL Server 2019中用JSON_VALUE提取Cost Center字段值报错解决
正确提取JSON嵌套字段的SQL Server语句
你的Tags列存储的是JSON数组,数组内对象的Tags属性是带转义引号的JSON片段字符串,并非直接的JSON对象。之前的错误是直接将整个数组与{}拼接,生成了非法JSON结构,导致路径解析报错。
方法一:嵌套使用JSON_VALUE
先从外层JSON数组提取内部的Tags字符串,再将其包装为合法JSON对象后提取目标字段:
SELECT [ID], [Tags], JSON_VALUE('{' + JSON_VALUE(Tags, '$[0].Tags') + '}', '$."Cost Center"') AS CostCenter FROM [dbo].[table_details]
JSON_VALUE(Tags, '$[0].Tags'):定位数组第一个元素的Tags属性,取出带转义的JSON片段字符串'{' + ... + '}':将片段包装为合法JSON对象- 最终通过
JSON_VALUE提取"Cost Center"字段值
方法二:用OPENJSON处理数组
如果数组可能包含多个元素,推荐用OPENJSON展开数组后处理:
SELECT td.[ID], td.[Tags], JSON_VALUE('{' + j.Tags + '}', '$."Cost Center"') AS CostCenter FROM [dbo].[table_details] td CROSS APPLY OPENJSON(td.Tags) WITH (Tags NVARCHAR(MAX) '$.Tags') j
这种方式会自动展开数组内的每个元素,逐个提取对应的Cost Center值。
内容的提问来源于stack exchange,提问作者Ronald Schilperoort
相关产品推荐
相关产品推荐

