怎样在MySQL中批量替换文章内容

2014年9月9日 | 分类: 【技术】

有时候需要将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