有时候需要将MySQL中的某些内容进行批量替换,这里介绍一个直接进行数据库里执行SQL命令来批量一次性快速查找出相应的字符并替换的方法。
进入数据库 MYSQL,或者打开phpmyadmin管理后台中,打开 SQL执行对话框,输入以下SQL命令:
1. 固定字符串,使用REPLACE函数:
案例:WordPress批量替换帖子正文内容字符
UPDATE `wp_posts` SET post_content = REPLACE( post_content, `https:`, `http:` );
案例:Destoonb批量替换帖子正文内容字符
UPDATE `destoon_article_data_23` SET content = REPLACE ( content, '被替换的字符串', '替换后的字符串' );
案例:Discuz批量替换帖子标题和正文内容字符
UPDATE `cdb_threads` SET subject = REPLACE ( subject, '被替换的字符串', '替换后的字符串' ); UPDATE `cdb_posts` SET subject = REPLACE ( subject, '被替换的字符串', '替换后的字符串' );
批量替换帖子正文内容字符
UPDATE cdb_posts SET message=REPLACE(message,’My Links’,”);
2.字符串不固定,但是是有一定特征的,可以通过正则表达式来模糊匹配进行处理:
UPDATE wp_posts SET post_content = REPLACE( post_content, SUBSTRING(post_content, LOCATE('<mark>', post_content),LOCATE('</mark>', post_content)-LOCATE('<mark>'+10, post_content)),'');
案例:需要将表mt2的到的内容删除。
+—-+——————————————+
| id | name |
+—-+——————————————+
| 1 | sdfsfbeijingsldjfsld |
| 2 | sdfsfshanghaisldjfsld |
| 3 | sdfsfjnsldjfsld |
| 4 | sdfsfqdsldjfsld |
+—-+——————————————+
update mt2 set name = replace(name, substring(name, locate('<contact>', name),locate('</contact>', name)-locate('<contact>'+10, name)),'');
结果:
+—-+——————-+
| id | name |
+—-+——————-+
| 1 | sdfsfactsldjfsld |
| 2 | sdfsfactsldjfsld |
| 3 | sdfsfactsldjfsld |
| 4 | sdfsfactsldjfsld |
+—-+——————-+
其中所用到的函数:
LOCATE:
LOCATE(substr,str)
POSITION(substr IN str)
返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0:
SUBSTRING:
SUBSTR(str,pos,len): 由中的第 位置开始,选出接下去的个字元。
REPLACE:
replace(str1, str2, str3): 在字串 str1 中,当 str2 出现时,将以 str3 替代。
参考:http://www.jb51.net/article/25769.htm
参考:http://babyjoycry.iteye.com/blog/609276