MySQL:如果字符串以jpg,gif或png结尾,则替换substring

时间:2010-01-19 03:48:06

标签: sql mysql wordpress string

我正在帮朋友,让他离开Blogger,进入托管的WordPress博客。

最大的问题是,有超过1,800个帖子,有很多图像链接需要处理。 WordPress没有自动导入这些的机制,所以我手动完成。

我已经使用wget下载了网站上链接/嵌入的每一张图片。现在,我需要一些帮助来构建MySQL查询,以将博客中的所有图像更改为新地址。

例如:

http://www.externaldomain.com/some/link/to/an/image.jpg

应该成为:

http://www.newbloghosting.com/wordpress/wp-content/uploads/legacy/www.externaldomain.com/some/link/to/an/image.jpg

所以条件是,如果post_content中的字符串以jpeg,jpg,gif或png结尾,则替换:

http://

http://www.newbloghosting.com/wordpress/wp-content/uploads/legacy/

我知道如何用

进行毯子替换
UPDATE wp_posts SET post_content = replace(post_content, 'http://www.old-domain.com', 'http://www.new-domain.com');

但是我很难弄清楚如何完成我更细致,有条件的方法。

感谢您提供的任何指导。 (在这里发布或者在ServerFault之间发生了撕裂,但是看起来它有很多MySQL专家,所以我在这里。)

4 个答案:

答案 0 :(得分:5)

MySQL有很多字符串操作函数可供您插入查询的WHERE部分。

UPDATE wp_posts
SET post_content = REPLACE(post_content, 'http://www.old-domain.com', 'http://www.new-domain.com')
WHERE RIGHT(post_content, 4) = 'jpeg'
   OR RIGHT(post_content, 3) IN ('jpg', 'gif', 'png');

如果是我,我会再做两件事:将其转换为小写以匹配例如'.JPG',并在jpg,gif等之前匹配点:

WHERE LOWER(RIGHT(post_content, 5)) = '.jpeg'
   OR LOWER(RIGHT(post_content, 4)) IN ('.jpg', '.gif', '.png');

答案 1 :(得分:2)

如果找到旧的子字符串,REPLACE将只执行更改 - 我没有看到问题。

REPLACE(post_content, 'http://www.old-domain.com', 'http://www.new-domain.com');

......会奏效。如果要限制对包含“jpeg”,“jpg”,“gif”和/或“png”的行的更新,请添加:

WHERE INSTR(post_content, 'jpeg') > 0
   OR INSTR(post_content, 'jpg') > 0
   OR INSTR(post_content, 'gif') > 0
   OR INSTR(post_content, 'png') > 0

参考文献:

答案 2 :(得分:0)

如果一切都失败了,那么使用import feature呢?然后使用plugin来获取您的图片(检查插件帖子中的评论,因为有一些相关信息)。

答案 3 :(得分:-1)

我不认为它可以在一个简单的查询中完成,但使用简单的PHP脚本相对容易。只需在php中使用一个简单的循环来遍历内容的每一行,并在内容字段上执行preg_replace,然后更新该行。

它并不像在sql中那样优雅,但它肯定会在今天完成工作,因为今年某个时候已经完成。

P.S。这假设内容不仅仅是网址,在这种情况下,正常mysql string functions就足够了。