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多次替换查询的主要内容,如果未能解决你的问题,请参考以下文章

replace MYSQL字符替换函数sql语句分享(正则判断)

如何计算 MySQL / 正则表达式替换器中的单词?

Mysql查询字符串替换[重复]

LABVIEW如何实现数组多次条件判断,并且替换数组中的值

mySQL怎么批量替换查询结果中的字段值?

使用 MySQL 查询查找和替换整个表中的文本