MySQL 多重替换查询

28

我有这个

UPDATE  table 
SET  example = REPLACE(example, '1', 'test') 
WHERE example REGEXP '1$'

所以这段代码将“example”字段中所有的“1”替换为“test”。

我想重复这个过程,对于2、3、4等数字也做同样的操作。

但是使用单独的查询会非常低效。

是否有任何办法可以只用一个查询来完成?

谢谢


听起来你需要将它移动到一个存储过程中,使用一个变量。 - D.N.
2个回答

68

套娃方式 ;-)

REPLACE(REPLACE(REPLACE(example, '3', 'test') , '2', 'test') , '1', 'test') 

嗨,它起作用了。但是where子句怎么办?即使它不是必需的,我读到它对于防止错误很重要。 - jamjam
如果我需要对10个不同的字符串执行此操作怎么办? 我们应该使用一个过程使其更加优雅,我认为。 - Dr. House

0

一个存储过程。

假设您有一个名为“lut”的表,其中包含一组要替换在名为“example”的表中的字段“content”中的值。

delimiter //
CREATE PROCEDURE myreplace()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE lv CHAR(64);
DECLARE li INT;
DECLARE lut CURSOR FOR SELECT id,value FROM lut l;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN lut;
lut_loop: LOOP
FETCH lut INTO li,lv;
IF done THEN
LEAVE lut_loop;
END IF;
update example set content = replace(content,lv,li);
END LOOP; 
CLOSE lut;
END;
//
delimiter ;
call myreplace();
drop procedure myreplace;

创建一个仅更新单个表的存储过程有何意义?它比SQL查询更好在哪里? - zerkms
@zerkms,优点在于查找表中可以有任意多个替换操作。这里的示例使用了一个具体的表名,但将表名及其对应的字段名作为参数传递是非常简单的。 - Konchog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接