首页 > 解决方案 > MySQL 更新多行中 1 列的一部分

问题描述

我有一个表,其中有一列“代码”,其值如下所示

3_22_00418

我需要将此值更新为

3_01_00418

我需要对表中的所有行执行此操作

我尝试的是以下内容:

UPDATE table SET
code = CASE
WHEN id='1' THEN '3_01_00418'
WHEN id='2' THEN '3_01_00519'
WHEN id='3' THEN '3_01_00647'
...

但这需要我基本上正确地处理所有行,并且我有数百行,这需要一段时间。

我怎样才能更聪明地做到这一点?

标签: mysqlsql

解决方案


如果你使用的是 MySQL 8+,那么这个REGEXP_REPLACE函数在这里就派上用场了:

UPDATE yourTable
SET code = REGEXP_REPLACE(code, '(\\d+)_\d+_(\\d+)', '$1_01_$2');

演示

如果您使用的是早期版本的 MySQL,我们可以尝试使用SUBSTRING_INDEX看起来稍显笨重的更新查询:

UPDATE yourTable
SET code = CONCAT(SUBSTRING_INDEX(code, '_', 1), '_01_',
    SUBSTRING_INDEX(code, '_', -1));

演示


推荐阅读