zblog网站数据转移到帝国cms中的出现标签tags-id.html转换为tags/id/,最简单的是用mysql正则替换 ,
update phome_ecms_news_data_1 SET newstext=REGEXP_REPLACE(newstext,'tags-([0-9]+)\.html','tags/$1/');
但是本地数据库版本不支持,不想升级数据库,于是小编写了一个存储过程执行这个功能,sql代码如下
DELIMITER $$
CREATE PROCEDURE my_procedure()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE (i <= 16476) DO
update phome_ecms_news_data_1 SET newstext=REPLACE(newstext,'tags-i.html','tags/i/');
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
call my_procedure();
运行时间比较长,最好是空闲时间或者流量少的凌晨执行。
DELIMITER $$
CREATE PROCEDURE my_procedure(a INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE (i <= a) DO
update phome_ecms_news_data_1 SET newstext=REPLACE(newstext,'tags-i.html','tags/i/');
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
call my_procedure(16476);
完善版
DELIMITER $$
CREATE PROCEDURE my_procedure(a INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE (i <= a) DO
update phome_ecms_news_data_1 SET newstext=REPLACE(newstext,CONCAT('tags-',i,'.html'),CONCAT('tags/',i,'/'));
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
call my_procedure(16476);
如果上面的存储过程错误,可以删除后再建立存储过程。
删除存储过程
drop procedure my_procedure;
drop procedure if exists my_procedure;