MySQL обновляет часть 1 столбца в несколько строк - PullRequest
0 голосов
/ 22 марта 2019

У меня есть таблица со столбцом «код», значение которого выглядит следующим образом, например,

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 ]

2 голосов
/ 22 марта 2019

Если вы используете 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));

Демо

0 голосов
/ 22 марта 2019

Используя функцию 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
             )
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...