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

MySQL如何更新列值:将IT-NORTH-XX替换为IT-NORTH

直接更新电力交换区域列的解决方案

嘿,Enrico,这个需求我完全明白——你想直接修改原表的Area_in和Area_out列,把IT-NORTH-FR、IT-NORTH-AT这类带国家后缀的取值统一替换成IT-NORTH,而且不想用CASE函数新建列对吧?没问题,咱们可以用SQL的字符串处理函数配合UPDATE语句直接实现,下面分几种主流数据库给出具体代码:

1. MySQL/MariaDB 实现

用SUBSTRING_INDEX函数按分隔符-截取前2段内容,非常简洁:

UPDATE your_table_name
SET 
  Area_in = SUBSTRING_INDEX(Area_in, '-', 2),
  Area_out = SUBSTRING_INDEX(Area_out, '-', 2)
WHERE 
  Area_in LIKE 'IT-NORTH-%' 
  AND Area_out LIKE 'IT-NORTH-%'; -- 可选:仅更新符合格式的行,避免误改其他数据

解释:SUBSTRING_INDEX(字段名, '-', 2)会把类似IT-NORTH-DE的字符串按-拆分,取前2段,直接得到IT-NORTH。加上WHERE子句更安全,防止修改不符合目标格式的行。

2. SQL Server 实现

用LEFT结合CHARINDEX定位第二个-的位置,然后截取前缀:

UPDATE your_table_name
SET 
  Area_in = LEFT(Area_in, CHARINDEX('-', Area_in, CHARINDEX('-', Area_in) + 1) - 1),
  Area_out = LEFT(Area_out, CHARINDEX('-', Area_out, CHARINDEX('-', Area_out) + 1) - 1)
WHERE 
  Area_in LIKE 'IT-NORTH-%'
  AND Area_out LIKE 'IT-NORTH-%';

解释:CHARINDEX('-', Area_in)找到第一个-的位置,再加1后调用CHARINDEX就能找到第二个-的位置,用LEFT截取到该位置的前一位,就得到了IT-NORTH。

3. PostgreSQL 实现

有两种方式可选,第一种用SPLIT_PART拆分后拼接:

UPDATE your_table_name
SET 
  Area_in = SPLIT_PART(Area_in, '-', 1) || '-' || SPLIT_PART(Area_in, '-', 2),
  Area_out = SPLIT_PART(Area_out, '-', 1) || '-' || SPLIT_PART(Area_out, '-', 2)
WHERE 
  Area_in LIKE 'IT-NORTH-%'
  AND Area_out LIKE 'IT-NORTH-%';

第二种用正则表达式匹配前缀,更简洁:

UPDATE your_table_name
SET 
  Area_in = SUBSTRING(Area_in FROM '^IT-NORTH'),
  Area_out = SUBSTRING(Area_out FROM '^IT-NORTH')
WHERE 
  Area_in LIKE 'IT-NORTH-%'
  AND Area_out LIKE 'IT-NORTH-%';

重要注意事项

  • 执行更新前务必测试:先运行SELECT语句验证结果,比如在MySQL中执行SELECT SUBSTRING_INDEX(Area_in, '-', 2) FROM your_table_name WHERE Area_in LIKE 'IT-NORTH-%',确认输出是你想要的IT-NORTH再执行UPDATE。
  • 备份数据:如果表数据量较大或者重要,建议先备份再操作,避免意外。
  • 性能优化:如果表中有大量符合条件的行,可以考虑分批更新或者给Area_in、Area_out列添加合适的索引,提升更新效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:41:00