SQL Server如何提取JSON数组并转为逗号分隔的字符串列?
解决SQL Server中JSON数组转逗号分隔字符串的问题
问题原因
JSON_VALUE函数仅能提取JSON中的单个标量值(如字符串、数字),而$.fiskepind是JSON数组类型,并非标量值,因此直接调用会返回NULL。
解决方案
要将JSON数组转换为逗号分隔的字符串,可通过拆分数组+聚合拼接的方式实现,以下是适配不同SQL Server版本的两种写法:
方法1:SQL Server 2017及以上版本(推荐)
用OPENJSON拆分数组元素,再通过STRING_AGG函数直接聚合拼接:
declare @mg nvarchar(max); set @mg = '{"fiskepind":["ko","hest","gris"]}'; SELECT @mg AS original_json, STRING_AGG(value, ',') AS fiskepind_values FROM OPENJSON(@mg, '$.fiskepind')
执行后fiskepind_values列会返回ko,hest,gris。
方法2:SQL Server 2016及更早版本
若无法使用STRING_AGG,可通过FOR XML PATH配合STUFF完成拼接:
declare @mg nvarchar(max); set @mg = '{"fiskepind":["ko","hest","gris"]}'; SELECT @mg AS original_json, STUFF(( SELECT ',' + value FROM OPENJSON(@mg, '$.fiskepind') FOR XML PATH(''), TYPE ).value('.', 'nvarchar(max)'), 1, 1, '') AS fiskepind_values
STUFF函数用于移除拼接后开头多余的逗号。
内容的提问来源于stack exchange,提问作者Morten V. Gade
相关产品推荐
相关产品推荐

