mysql替换字符串技巧

今天整理一下数据库的表,发现有好些地方需要替换,格式是固定的但是字符是变化的。

如:

红框中  漏洞类型:XXX弱点描述,是需要删除的。中间的字符是变化的,此时可以使用locate、substring和replace三个方法结合就可以成功清除掉冗余的字符。

1、截取字符串 
substring(str, pos) 
substring(str, pos, length) 
说明:substring(被截取字段,从第几位开始截取) 
substring(被截取字段,从第几位开始截取,截取长度)

2、返回字符串位置
LOCATE(substr,str,pos) 
返回子串 substr 在字符串 str 中的第 pos 位置后第一次出现的位置。如果 substr 不在 str 中返回 0 
如 SELECT LOCATE('bar', ‘foobarbar',5)   返回7 

3、字符串替换
REPLACE(str,from_str,to_str) 
在字符串 str 中所有出现的字符串 from_str 均被 to_str替换,然后返回这个字符串 

所以清除上图字符串的sql语句可以这样写:

update VuldbDetail set descr=replace(descr,substring(descr,1,(locate('弱点描述',descr)+5)),'')  where `productid`=0

locate加5是因为locate('弱点描述',descr) 返回的是“弱”字的位置,+5可以覆盖到我需要替换的字符。

同理,

我要把“一般性的建议:”去掉sql语句和上面相似

update VuldbDetail set advice=replace(advice,substring(advice,1,(locate('一般性的建议',advice)+7)),'') where `productid`=0

接下来需要去掉标签,只保留连接

思路是先把<a***_blank">去掉,然后再去掉</a>,sql语句可以这样写

update VuldbDetail set descr=replace(replace(descr,substring(descr,locate('<a href',descr),locate('blank">',descr)-locate('<a href',descr)+7),''),'</a>','')  where `productid`=0 and descr like '%</a>%'

注意:update时尽量多检查一下,刚刚写错,重新回滚还原数据好麻烦。

猜你喜欢

转载自blog.csdn.net/qq1124794084/article/details/81775651