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

如何在SQL Server中从JSON数组移除指定元素?

在SQL Server中移除JSON数组的指定元素

针对你提出的JSON数组元素移除需求,这里提供两种实用的实现方案:

方法1:拆解数组+过滤+重组(推荐处理单/多元素移除)

这种方法通用性最强,不管是移除单个还是多个元素都能轻松处理,核心思路是把JSON数组拆成行数据,过滤掉目标元素后再重新聚合为JSON数组。

假设你的表名为YourTable,JSON列名为JsonArrayCol,主键列是Id:

移除单个元素(示例:移除"3")

UPDATE YourTable
SET JsonArrayCol = (
    SELECT JSON_QUOTE(value) AS [value]
    FROM OPENJSON(JsonArrayCol)
    WHERE value != '3'
    FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
)
WHERE Id = 1; -- 指定要更新的目标行

移除多个元素(示例:移除"2"和"4")

用NOT IN过滤多个目标元素即可:

UPDATE YourTable
SET JsonArrayCol = (
    SELECT JSON_QUOTE(value) AS [value]
    FROM OPENJSON(JsonArrayCol)
    WHERE value NOT IN ('2', '4')
    FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
)
WHERE Id = 1;

如果需要确保过滤后空结果显示为[]而非NULL,可以加ISNULL判断:

UPDATE YourTable
SET JsonArrayCol = ISNULL((
    SELECT JSON_QUOTE(value) AS [value]
    FROM OPENJSON(JsonArrayCol)
    WHERE value NOT IN ('2', '4')
    FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
), '[]')
WHERE Id = 1;

方法2:用JSON_MODIFY移除单个元素(仅适合已知索引的场景)

如果仅需移除单个元素,且明确知道该元素在数组中的索引(从0开始计数),可以用JSON_MODIFY直接将对应位置设为NULL,但这种方式会留下null值,后续还需清理,实用性不如方法1。

示例:移除数组中第3个元素(索引2,对应值"3"):

UPDATE YourTable
SET JsonArrayCol = JSON_MODIFY(JsonArrayCol, '$[2]', NULL)
WHERE Id = 1;

补充说明

  • 若你的SQL Server版本为2017及以上,也可以用STRING_AGG替代FOR JSON实现数组重组,效果一致:
UPDATE YourTable
SET JsonArrayCol = CONCAT('[', STRING_AGG(JSON_QUOTE(value), ','), ']')
FROM YourTable
CROSS APPLY OPENJSON(JsonArrayCol)
WHERE value NOT IN ('2', '4')
GROUP BY Id
HAVING Id = 1;
  • 操作前建议先执行SELECT语句验证结果,确认无误后再执行UPDATE,避免误操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:45:33