如何用SQL/T-SQL从JSON字段的字典提取GUID并生成逗号分隔列表?
T-SQL提取JSON字典值并拼接为逗号分隔字符串
针对你的需求,最优实现方式分两种场景,优先使用高版本SQL Server的原生聚合函数:
方案一:SQL Server 2017及以上版本(推荐)
利用OPENJSON解析JSON字典,结合STRING_AGG直接拼接值,代码简洁且性能最优:
SELECT t.Test_ID, -- 若需去重可添加DISTINCT:STRING_AGG(DISTINCT j.[value], ',') STRING_AGG(j.[value], ',') AS LaneGuidList FROM 你的表名 t CROSS APPLY OPENJSON(t.Test_JSON, '$.LaneIds') j GROUP BY t.Test_ID;
逻辑说明
OPENJSON(t.Test_JSON, '$.LaneIds'):定位到Test_JSON中的LaneIds节点,将字典结构解析为包含[key](原数字键)和[value](对应GUID)的行集。CROSS APPLY:将每个Test_ID对应的LaneIds字典展开为多行记录。STRING_AGG:将同一Test_ID下的所有GUID值按逗号拼接成单字符串,是SQL Server原生的字符串聚合函数,性能远优于XML拼接方式。
方案二:SQL Server 2016及更早版本
若无法使用STRING_AGG,则用FOR XML PATH拼接:
SELECT t.Test_ID, STUFF(( SELECT ',' + j.[value] FROM OPENJSON(t.Test_JSON, '$.LaneIds') j FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS LaneGuidList FROM 你的表名 t GROUP BY t.Test_ID;
逻辑说明
- 子查询通过
FOR XML PATH('')将所有GUID拼接成带前置逗号的字符串。 STUFF函数去掉字符串开头的多余逗号。TYPE参数确保拼接过程中不会转义特殊字符。
内容的提问来源于stack exchange,提问作者Yeti
相关产品推荐
相关产品推荐

