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

T-SQL如何将预提取JSON数组字符串的多个值拆分转换为多行

T-SQL 拆分JSON数组格式字段为多行的实现方法

适用场景

你提到的Group_ID字段存储的是标准JSON数组字符串,SQL Server 2016及以上版本可以直接用原生JSON函数处理,不需要额外做字符串清洗。

核心实现(SQL Server 2016+ 推荐方案)

用到OPENJSON函数解析JSON数组,搭配CROSS APPLY实现一行拆多行:

SELECT 
    t.ID,
    j.value AS Group_ID
FROM 
    你的源表名 t
CROSS APPLY 
    OPENJSON(t.Group_ID) j

说明

  • OPENJSON解析JSON数组后返回的value字段就是数组中的单个元素值,会自动去掉外层引号,不需要额外处理
  • 如果需要保留Group_ID为空、或不是合法JSON数组的原行,把CROSS APPLY换成OUTER APPLY即可

效果示例

原表行:

IDGroup_ID
1["def","hij"]
2["abc"]

查询返回结果:

IDGroup_ID
1def
1hij
2abc

低版本SQL Server兼容方案(2016以下无原生JSON支持)

先创建自定义拆分函数:

CREATE FUNCTION dbo.SplitGroupID(@GroupIDStr NVARCHAR(MAX))
RETURNS @Result TABLE (Value NVARCHAR(200))
AS
BEGIN
    SET @GroupIDStr = TRIM('[]' FROM ISNULL(@GroupIDStr, ''))
    IF LEN(@GroupIDStr) = 0 RETURN

    DECLARE @SplitStr NVARCHAR(3) = '","'
    DECLARE @Start INT = 1, @Pos INT = CHARINDEX(@SplitStr, @GroupIDStr)
    WHILE @Pos > 0
    BEGIN
        INSERT INTO @Result(Value)
        VALUES (REPLACE(SUBSTRING(@GroupIDStr, @Start, @Pos - @Start), '"', ''))
        SET @Start = @Pos + LEN(@SplitStr)
        SET @Pos = CHARINDEX(@SplitStr, @GroupIDStr, @Start)
    END

    INSERT INTO @Result(Value)
    VALUES (REPLACE(SUBSTRING(@GroupIDStr, @Start, LEN(@GroupIDStr) - @Start + 1), '"', ''))
    RETURN
END
GO

调用函数实现拆分:

SELECT 
    t.ID,
    s.Value AS Group_ID
FROM 
    你的源表名 t
CROSS APPLY 
    dbo.SplitGroupID(t.Group_ID) s

内容的提问来源于stack exchange,提问作者SUMguy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:24:04