如何在SQL表的嵌套JSON字段中批量修改键名:将Monthly return改为Weekly return
SQL修改JSON列中的键名解决方案
方法1:精准解析重构JSON(推荐)
针对SQL Server环境,通过逐层解析嵌套JSON结构,精准替换目标键名,避免误操作:
假设你的表名为your_table,且有唯一标识列用于定位数据,执行以下更新语句:
UPDATE your_table SET tableJson = ( SELECT j.type, ( SELECT ( SELECT CASE WHEN [key] = 'Monthly return' THEN 'Weekly return' ELSE [key] END AS [key], value FROM OPENJSON(rows) FOR JSON PATH, WITHOUT_ARRAY_WRAPPER ) AS rows FROM OPENJSON(j.content) WITH (rows NVARCHAR(MAX) AS JSON) FOR JSON PATH, WITHOUT_ARRAY_WRAPPER ) AS content FROM OPENJSON(tableJson) WITH ( type NVARCHAR(50), content NVARCHAR(MAX) AS JSON ) j FOR JSON PATH ) WHERE tableJson IS NOT NULL;
逻辑说明
- 顶层解析:用
OPENJSON(tableJson)提取外层JSON的type和嵌套的content字段(AS JSON保留content的JSON结构)。 - 内层处理:解析
content中的rows数组,遍历每个键值对,将"Monthly return"替换为"Weekly return"。 - 重构JSON:逐层将处理后的键值对重新组合成完整的JSON字符串,更新回原列。
方法2:字符串替换(快速但需谨慎)
若能确保JSON中仅键名存在"Monthly return"(值或其他位置无该字符串),可使用简单替换快速完成:
UPDATE your_table SET tableJson = REPLACE(tableJson, '"Monthly return"', '"Weekly return"') WHERE tableJson LIKE '%"Monthly return"%';
注意事项
- 此方法效率高但有风险,若JSON的其他部分包含目标字符串会被误替换,仅适用于结构明确的场景。
验证修改结果
执行更新后,可通过以下语句确认修改是否生效:
SELECT tableJson FROM your_table WHERE tableJson LIKE '%"Weekly return"%';
内容的提问来源于stack exchange,提问作者stamoyo
相关产品推荐
相关产品推荐

