MySQL更新多行中1列的一部分

时间:2019-03-22 08:35:31

标签: mysql sql

我有一个表,该表的“代码”列的值看起来像这样

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'
...

但这要求我基本上对所有行都正确,而我有数百行,这需要一段时间。

我如何变得更聪明?

2 个答案:

答案 0 :(得分:2)

如果您使用的是MySQL 8+,则REGEXP_REPLACE函数在这里很方便:

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

Demo

如果您使用的是MySQL的早期版本,我们可以尝试使用SUBSTRING_INDEX来处理看起来稍大一些的更新查询:

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

Demo

答案 1 :(得分:0)

按如下所示使用REPLACE函数:

SELECT REPLACE("3_01_00418", "_22_", "_01_");

EX: 
1) First way:

UPDATE table SET
code = REPLACE(code , "_22_", "_01_")
...

2)第二种方式:

  UPDATE table SET
     code = (case when id>=1 and id<= 100 then REPLACE(code , "_22_", "_01_")
                  when id>100 and id<= 200 then REPLACE(code , "_22_", "_02_")
                  else  REPLACE(code , "_22_", "_01_")
                  end
             )
    ...