mysql字符串替换_MySQL的字符串替换更新操作

大家好,我是anyux。本文介绍MySQL的字符串替换更新操作。

523cc2afb4947a479bb90a070f7185bc.png

在贴吧里看到吧友提出问题,还提供红包,看到这些摩拳擦掌,需要解决,就决定在数据库操作一通。

吧友提出的需求如下:

要批量删除数据库表wp_posts的字段post_content中内容为srcset=“XXX”应该怎么搞!srcset=“XXX”都删除,不是只删除这个属性中的内容。

77697c346d5535b438fff57fadadd053.png

以下是我的解决方案

数据库A中有表B,字段包括id,name,content。数据行数有5条示例创建库、表,并插入数据

create database A charset utf8;use A;create table B(id int, name char(20),content varchar(255));

insert into B values(1,"zs","有朋自远方来,a='b',不亦乐乎"),(2,"ls","人不知而不愠,a='b',不亦君子乎 "),(3,"ww","敬鬼神,a='b',而远之 "),(4,"zl","朝辞白帝彩云间,a='b',千里江陵一日还"),(4,"qb","两岸猿声啼不住,a='b',轻舟已过万重山");

e640beba51777dd635768bd4ab07a329.png

解决思路是

替换a='b'为空,代表删除a='b'

替换语句如下

update B set content = replace(content,"a='b'",'');

74d42f5b9ae9da2b6148ca0d4caffd66.png

查看表内容

下图中的a='b'已被删除。就在我以为问题解决了时,又看到吧友的回复

445e78155c9a119eb46426e3b6daa8ec.png

吧友回复如下

5a1d0af9085d0a8ace7249f851b340ff.png

嗯,顿时感觉自己太年轻了[苦笑]

怎么办,不能楞着,按吧友的规则,创建一些随机字符

de266e58abfd6a9543fd7026529b42ae.png

第一步:建库、表、插入语句

create database A charset utf8;use A;create table B(id int, name char(20),content varchar(255));insert into B values(1,"zs","有朋自远方来,a='随机字符&.0fFDc',不亦乐乎"),(2,"ls","人不知而不愠,a='符随机字FEHfd,.*',不亦君子乎 "),(3,"ww","敬鬼神,a='F符随机字EHfd,.*',而远之 "),(4,"zl","朝辞白帝彩云间,a='P)Pfead*#%',千里江陵一日还"),(5,"qb","两岸猿声啼不住,a=' Unix-like、+{{#R',轻舟已过万重山");

ea17d729cd2e3e963ba3b32989811da2.png

第二步:获取数据

获取前半段数据

select substr(content,1,locate('a',content)-1) from B;

#获取后半段数据

select substr(content,locate('\'',content,locate('\'',content)+1)+1) from B;

24add77102c91e0a4ce28ce982314307.png

第三步:拼接数据方法1

使用了字符串截取与拼接函数,对每行记录形成一条sql语句,并导出到文件中

select concat("update `A`.`B` set content = '",substr(content,1,locate('a',content)-1),substr(content,locate('\'',content,locate('\'',content)+1)+1),"' where id=",id,";") as update_sql from B into outfile '/tmp/update.sql';

3197e6b7932f63640a78a9c43b0bee0f.png

替换数据

查看sql文件

cat /tmp/update.sql

33075319189447741987f32ca7a2c019.png

导入数据,数据已恢复

5d362ba90124243958d0069e7742849f.png

方法2

使用替换函数replace,拼接函数concat,截取函数substr,自动截取数据,并针对每行记录进行更新操作

f27128f23aa72342a4ce71431857b625.png

这种方法只需要一条语句,就实现整个数据表的更新。推荐这种方式

update Bset content=replace(content,content,concat(substr(content,1,locate('a',content)-1),substr(content,locate('\'',content,locate('\'',content)+1)+1)));

提示:这里给的方法,只适用于普通的字符,对于表达式中存在多个单引号或双引号,还需要你自己根据业务情况作出判断

6b8de66e53ec30f685e3aac75f6333ae.png

欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍运维、数据库相关的技术,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值