背景

现在如果我们有几千条数据,甚至上百万条,想把某数据中某个字段的内容从662P替换成662P.COM,一条条替换那是不可取的方法,所以我们需要借助一些工具或者通过代码来实现等。


方法

首先想到的自然是像代码替换或者正则那样的方法。

mysql有个REPLACE(str,old_string,new_string)方法str 为字段名,可以直接替换字段中旧值为新值。

数据库名:662p.com   ,中的一条数据表yt_cms

SQL代码:


UPDATE `662p.com`.`yt_cms` SET

`yt_cms`.`content` = replace(content, '662P', '662P.COM');

来源参考---------------



replace语法的使用详解

实际需求中,需要对某张表某字段里面的内容进行批量替换,普通的思考流程如下:

SELECT出来

str_replace替换UPDATE写入

实际这样极其浪费资源以及消耗资源,MYSQL内置了一个批量替换的语法

代码如下:

UPDATE table SET field = replace(field,'被替换','替换成')

1

UPDATEtableSETfield=replace(field,'被替换','替换成')

直接就替换了,后面也可以跟WHERE 条件语句

支持多个词同时被替换

代码如下:

UPDATE table SET field = replace(field,'被替换1','替换成1'),field = replace(field,'被替换2','替换成2')

1

UPDATEtableSETfield=replace(field,'被替换1','替换成1'),field=replace(field,'被替换2','替换成2')

很强大吧,后面那个一次性更换多个网上是没有的列子,现在记录下来

MySQL批量替换指定字段字符串语句

update 表名 set 字段名=replace(字段名,'原来的内容','替换后的内容')

1

update表名set字段名=replace(字段名,'原来的内容','替换后的内容')

举一个例子,就是我实际操作的时候的命令:

update cpg1410_pictures set filepath=replace(filepath,'wallpapers/art/','wallpapers/beautiful/art/')

1

updatecpg1410_picturessetfilepath=replace(filepath,'wallpapers/art/','wallpapers/beautiful/art/')

UPDATE 数据表名 SET

字段名 = replace(字段名, '要替换的字符串', '替换为')

WHERE 设定条件;

1

2

3

4

5

UPDATE数据表名SET

字段名=replace(字段名,'要替换的字符串','替换为')

WHERE设定条件;

WordPress实际应用

如将WordPress文章中的“搜索引擎优化”全部替换成“搜索引擎营销”,替换语句为:

UPDATE wp_posts SET

post_content = replace(post_content, '搜索引擎优化', '搜索引擎营销');

1

2

UPDATEwp_postsSET

post_content=replace(post_content,'搜索引擎优化','搜索引擎营销');

语句中还可以加入替换条件,如只替换限定ID小于200的内容:

UPDATE wp_posts SET

post_content = replace(post_content, '搜索引擎优化', '搜索引擎营销')

WHERE ID < 200;

1

2

3

UPDATEwp_postsSET

post_content=replace(post_content,'搜索引擎优化','搜索引擎营销')

WHEREID<200;

举例说明

1)把backupfile表里url的字段内容里为http://www.maidq.com的字符全部改为http://maidq.com。

update backupfile set url=REPLACE(url,'http://www.maidq.com','http://maidq.com')

2)根据条件增加字段的内容,如把file_number=1的记录的logical_name字段的内容前面加上tmp,后面加上end。

update backupfile set logical_name=REPLACE(logical_name,logical_name,'tmp'+logical_name+' end ') where file_number=1

3)根据条件去掉指定记录的前面2个字符。

update backupfile set logical_name=REPLACE(logical_name,logical_name,SUBSTRING(logical_name,3,len(logical_name)-2)) where file_number=1

4)根据条件去掉指定记录的后面4个字符。

update backupfile set logical_name=REPLACE(logical_name,logical_name,SUBSTRING(logical_name,1,len(logical_name)-4)) where file_number=2

如有不清楚的可以先用select语句验证是否达成自己想要的效果再进行替换:

SELECT   REPLACE(替换字段,'原内容','新内容') from 表名;

update 表名 set 替换字段=(REPLACE(替换字段,'原内容','新内容'))






评论 0

暂无评论
0
0
0
立即
投稿
发表
评论
返回
顶部