SQL Server:选择JSON的字符串数组

unftdfkk  于 2022-12-03  发布在  SQL Server
关注(0)|答案(2)|浏览(159)

给定以下测试数据:

declare @mg nvarchar(max);
set @mg = '{"fiskepind":["ko","hest","gris"]}';

select @mg, JSON_VALUE(@mg,'$.fiskepind')

如何返回包含以下内容的列:

ko,hest,gris

示例返回:NULL,我不想[index]只返回一个。

epggiuax

epggiuax1#

如果你只需要一个合并列表,你可以使用OPENJSON得到一个表,然后使用FOR XML PATHSTRING_AGG组合成一个字符串。

declare @mg nvarchar(max);
set @mg = '{"fiskepind":["ko","hest","gris"]}';

select @mg, JSON_VALUE(@mg,'$.fiskepind')
  , STUFF((
    SELECT
      ',' + value
    FROM OPENJSON(@mg, '$.fiskepind')
    FOR XML PATH('')
  ),1,1,'') as combined_list
niwlg2el

niwlg2el2#

从SQL Server 2017开始,可能的解决方案是OPENJSON()STRING_AGG()的组合。

SELECT STRING_AGG([value], ',') WITHIN GROUP (ORDER BY CONVERT(int, [key])) AS Result
FROM OPENJSON(@mg, '$.fiskepind')

请注意,JSON_VALUE()返回一个标量值,因此当您尝试从输入JSON文本中提取JSON数组('$.fiskepind')时,NULL值是预期结果。

相关问题