今天整理一下数据库的表,发现有好些地方需要替换,格式是固定的但是字符是变化的。
如:
红框中 漏洞类型: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时尽量多检查一下,刚刚写错,重新回滚还原数据好麻烦。