MYSql множественный запрос на замену - PullRequest
14 голосов
/ 28 марта 2011

У меня есть это

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

Таким образом, этот код заменяет все вхождения "1" в поле "example" на "test".

Я хочу повторить это для 2,3, 4 и т. Д.

Но было бы очень неэффективно использовать отдельные запросы.

Можно ли как-то это сделать одним запросом?

Спасибо

Ответы [ 2 ]

41 голосов
/ 28 марта 2011

Матрешка; -)

REPLACE(REPLACE(REPLACE(example, '3', 'test') , '2', 'test') , '1', 'test') 
0 голосов
/ 04 мая 2017

Хранимая процедура.

Если у вас есть таблица 'lut' с набором значений, которые вы хотите заменить в поле 'content' из таблицы, она называется 'example'

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