MySQL的字符串替換更新操作

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

MySQL的字符串替換更新操作

在貼吧裡看到吧友提出問題,還提供紅包,看到這些摩拳擦掌,需要解決,就決定在數據庫操作一通。

吧友提出的需求如下:

要批量刪除數據庫表wp_posts的字段post_content中內容為srcset=“XXX”應該怎麼搞!srcset=“XXX”都刪除,不是隻刪除這個屬性中的內容。

MySQL的字符串替換更新操作

以下是我的解決方案

數據庫A中有表B,字段包括id,name,content。數據行數有5條示例創建庫、表,並插入數據

<code> 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',輕舟已過萬重山");/<code>
MySQL的字符串替換更新操作


解決思路是

替換a='b'為空,代表刪除a='b'

替換語句如下

<code> update B set content = replace(content,"a='b'",'');  /<code>
MySQL的字符串替換更新操作

查看錶內容

下圖中的a='b'已被刪除。就在我以為問題解決了時,又看到吧友的回覆

MySQL的字符串替換更新操作

吧友回覆如下

MySQL的字符串替換更新操作

嗯,頓時感覺自己太年輕了[苦笑]

怎麼辦,不能楞著,按吧友的規則,創建一些隨機字符

MySQL的字符串替換更新操作


第一步:建庫、表、插入語句

<code> 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',輕舟已過萬重山");/<code>
MySQL的字符串替換更新操作

第二步:獲取數據

<code> 獲取前半段數據
 select substr(content,1,locate('a',content)-1) from B;/<code>
<code> #獲取後半段數據
 select substr(content,locate('\\'',content,locate('\\'',content)+1)+1) from B;/<code>
MySQL的字符串替換更新操作

第三步:拼接數據方法1

使用了字符串截取與拼接函數,對每行記錄形成一條sql語句,並導出到文件中

<code> 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';/<code>
MySQL的字符串替換更新操作

替換數據

查看sql文件

<code> cat /tmp/update.sql/<code> 
MySQL的字符串替換更新操作

導入數據,數據已恢復

MySQL的字符串替換更新操作

方法2

使用替換函數replace,拼接函數concat,截取函數substr,自動截取數據,並針對每行記錄進行更新操作

MySQL的字符串替換更新操作


這種方法只需要一條語句,就實現整個數據表的更新。推薦這種方式

<code> update B 

 set content=
 replace(content,content,
 concat(
 substr(content,1,locate('a',content)-1),
 substr(content,locate('\\'',content,locate('\\'',content)+1)+1)
 )
 );  /<code>


提示:這裡給的方法,只適用於普通的字符,對於表達式中存在多個單引號或雙引號,還需要你自己根據業務情況作出判斷

MySQL的字符串替換更新操作

歡迎在評論區一起討論,質疑。文章都是手打原創,每天最淺顯的介紹運維、數據庫相關的技術,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章。


分享到:


相關文章: