我有一个表,该表的“代码”列的值看起来像这样
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'
...
但这要求我基本上对所有行都正确,而我有数百行,这需要一段时间。
我如何变得更聪明?
答案 0 :(得分:2)
如果您使用的是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));
答案 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
)
...