You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:35:18