MYSql多次替换查询
Posted
技术标签:
【中文标题】MYSql多次替换查询【英文标题】:MYSql multiple replace query 【发布时间】:2011-07-24 12:57:44 【问题描述】:我有这个
UPDATE table
SET example = REPLACE(example, '1', 'test')
WHERE example REGEXP '1$'
因此,此代码将“example”字段中的所有“1”实例替换为“test”。
我想对 2、3、4 等重复此操作。
但是使用单独的查询会非常低效。
我有什么方法可以只用一个查询来做到这一点吗?
谢谢
【问题讨论】:
听起来您需要使用变量将其移动到存储过程中。 【参考方案1】:一个存储过程。
假设您有一个表“lut”,其中包含一组值,您希望在表中的字段“内容”中替换这些值称为“示例”
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;
【讨论】:
创建只更新单个表的 SP 有什么意义?它比 SQL 查询好在哪里? @zerkms,优点是可以在查找表中进行尽可能多的替换操作。这里的例子使用了一个具体的表名,但是传递一个表名和它对应的字段名作为参数是很简单的。【参考方案2】:俄罗斯套娃方式;-)
REPLACE(REPLACE(REPLACE(example, '3', 'test') , '2', 'test') , '1', 'test')
【讨论】:
嗨,它工作。但是 where 子句呢?即使没有必要。我读到防止错误很重要。 如果我需要为 10 个不同的字符串执行此操作怎么办?我认为我们应该使用一个过程来使它更优雅。以上是关于MYSql多次替换查询的主要内容,如果未能解决你的问题,请参考以下文章