MySQL替换函数replace

一般对于博客程序来说,使用替换语句也许是最有用的一种维护方式了,特别是对于所有博文内容里有统一修改的地方。由于我的博客站点在upload图片上传目录下需要按年建目录,这倒不是什么难点,可是之前上传的图片都要移动到相应的目录里,这样的话博文里所有的图片URL都要改变。

比如图片a.jpg原来在upload路径下,博文里的地址是

【国内直连ChatGPT 29元起】
国内直连ChatGPT,Plus会员每月29元起,支持最新o1模型探索更多领域,无需注册OpenAI账号。

https://www.qttc.net/static/upload/a.jpg

现在要把a.jpg移动到upload下的2012文件夹里,那么博文里的地址就需要改变成

https://www.qttc.net/static/upload/2012/a.jpg

这样才能访问移动后的图片。如果是单处修改还好,如果所有文章的图片地址都需要修改,显然通过后台一篇一篇的改有点力不从心,并且可能会遗漏。像这样的情况,我们可以使用MySQL的替换语句。由于图片地址目录都一样是www.qttc.net/static/upload,我们只需要把这部分都统一修改成www.qttc.net/static/upload/2012就好。

SQL语句

UPDATE 表名
SET 字段名 = REPLACE(字段名, '搜索的字符串', '替换的字符串')
WHERE INSTR(字段名,'搜索的字符串') > 0

这个语句的用法特别简单,使用MySQL的REPLACE()替换函数即可实现,REPLACE函数的第一个选项是字段名,第二个选项是要搜索的字符串,第三个选项是替换的字符串。最后那一句INSTR()函数是模糊查询方法,效果跟使用LIKE()函数一样,表示只替换查询到的数据。

如我的表名blog,博文内容字段名b_content,那么这个需求的SQL语句就可以这么写

UPDATE blog
SET b_content = REPLACE(b_content, 'www.qttc.net/static/upload', 'www.qttc.net/static/upload/2012')
WHERE INSTR(b_content,'www.qttc.net/static/upload') > 0

执行后再来看看博文中所有图片的链接地址,都已OK。

其实REPLACE()函数还有很多诸如类似需要用到的地方,比如把博文的空格删掉

UPDATE blog
SET b_content = REPLACE(b_content, ' ', '')
WHERE INSTR(b_content,' ') > 0

但是感觉用MySQL的TRIM()清除空格函数会更好一些

UPDATE blog SET b_content = TRIM(b_content)

这样也可以实现清除空格效果

分享

TITLE: MySQL替换函数replace

LINK: https://www.qttc.net/156-mysql-replace.html

NOTE: 原创内容,转载请注明出自琼台博客