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

如何用SQL的JSON_MODIFY将逗号分隔ItemID转为JSON数组?

解决SQL中逗号分隔字符串转JSON数组的问题

问题描述

已创建Purchases表并插入数据,ItemID字段为逗号分隔的字符串。尝试使用JSON_MODIFY生成JSON时,得到的是{ "ItemID": "1,2" }这种字符串形式的结果,期望转为{ "ItemID": [ "1", "2" ] }的数组形式JSON,预期结果如下:

ClientIDItemIDJson
12341,2{ "ItemID": [ "1", "2" ] }
56783,4{ "ItemID": [ "3", "4" ] }

原SQL代码:

create table Purchases (ClientId int, ItemId varchar(128));
insert into Purchases (ClientId, ItemId)
values(1234, '1,2'),(5678, '3,4');

Declare @newtable table(
    clientid NVARCHAR(MAX),
    itemid NVARCHAR(MAX),
    json NVARCHAR(MAX)
);
insert into @newtable
select [ClientID], [ItemID],'{}'From Purchases;

Update @newtable
Set Json = JSON_MODIFY (Json, '$.ItemID', [ItemID]);

select * from @newtable;

解决方案

要将逗号分隔的字符串转为JSON数组,需先把字符串转换为合法的JSON数组格式,再通过JSON_QUERY让JSON_MODIFY识别为JSON类型(而非普通字符串)。修改后的SQL代码如下:

create table Purchases (ClientId int, ItemId varchar(128));
insert into Purchases (ClientId, ItemId)
values(1234, '1,2'),(5678, '3,4');

Declare @newtable table(
    clientid NVARCHAR(MAX),
    itemid NVARCHAR(MAX),
    json NVARCHAR(MAX)
);
insert into @newtable
select [ClientID], [ItemID],'{}'From Purchases;

Update @newtable
Set Json = JSON_MODIFY (
    Json, 
    '$.ItemID', 
    JSON_QUERY('["' + REPLACE(ItemID, ',', '","') + '"]')
);

select * from @newtable;

原理说明

  1. 转换为JSON数组格式:使用REPLACE(ItemID, ',', '","')把逗号分隔的字符串1,2替换为1","2,再拼接前后的["和"],得到["1","2"]这个合法的JSON数组字符串。
  2. JSON_QUERY的作用:JSON_QUERY会返回被识别为JSON类型的值,这样JSON_MODIFY就不会把它当成普通字符串包裹引号,而是直接作为JSON数组插入到目标JSON中。

如果你的SQL Server版本为2017及以上(支持STRING_SPLIT和STRING_AGG),可以用更稳妥的方式构造数组(适配字符串含特殊字符的场景):

Update @newtable
Set Json = JSON_MODIFY (
    Json, 
    '$.ItemID', 
    (
        SELECT JSON_QUERY('["' + STRING_AGG(QUOTENAME(value, '"'), ',') + '"]')
        FROM STRING_SPLIT(ItemID, ',')
    )
);

这种方式会先拆分字符串,再给每个元素添加引号并拼接成数组,避免特殊字符破坏JSON格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:12:42