mysql字符串替换_MySQL的字符串替换更新操作
⼤家好,我是anyux。本⽂介绍MySQL的字符串替换更新操作。
在贴吧⾥看到吧友提出问题,还提供红包,看到这些摩拳擦掌,需要解决,就决定在数据库操作⼀通。
吧友提出的需求如下:
要批量删除数据库表wp_posts的字段post_content中内容为srcset=“XXX”应该怎么搞!srcset=“XXX”都删除,不是只删除这个属性中的内容。
以下是我的解决⽅案
数据库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',轻⾈已过万重⼭");
解决思路是
替换a='b'为空,代表删除a='b'
替换语句如下
update B set content = replace(content,"a='b'",'');
查看表内容
下图中的a='b'已被删除。就在我以为问题解决了时,⼜看到吧友的回复
吧友回复如下
嗯,顿时感觉⾃⼰太年轻了[苦笑]
怎么办,不能楞着,按吧友的规则,创建⼀些随机字符
第⼀步:建库、表、插⼊语句
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='符随机字FEH
fd,.*',不亦君⼦乎 "),(3,"ww","敬⿁神,a='F符随机字EHfd,.*',⽽远之 "),(4,"zl","朝辞⽩帝彩云间,a='P)Pfead*#%',千⾥江陵⼀⽇还"),(5,"qb","两岸猿声啼不住,a=' Unix-like、+ {{#R',轻⾈已过万重⼭");
第⼆步:获取数据
获取前半段数据
select substr(content,1,locate('a',content)-1) from B;
#获取后半段数据
select substr(content,locate('\'',content,locate('\'',content)+1)+1) from B;
第三步:拼接数据⽅法1
使⽤了字符串截取与拼接函数,对每⾏记录形成⼀条sql语句,并导出到⽂件中
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';
替换数据
查看sql⽂件
cat /tmp/update.sql
导⼊数据,数据已恢复
⽅法2
使⽤替换函数replace,拼接函数concat,截取函数substr,⾃动截取数据,并针对每⾏记录进⾏更新操作
这种⽅法只需要⼀条语句,就实现整个数据表的更新。推荐这种⽅式
update Bset content=replace(content,content,concat(substr(content,1,locate('a',content)-
1),substr(content,locate('\'',content,locate('\'',content)+1)+1)));
提⽰:这⾥给的⽅法,只适⽤于普通的字符,对于表达式中存在多个单引号或双引号,还需要你⾃⼰根据业务情况作出判断

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。