SQL查找和替换

时间:2010-12-23 19:47:35

标签: sql mysql wordpress replace

我如何做到以下几点:

在我的Wordpress网站上,我想替换帖子内容中的内容

以下所有实例: http://play.videolog.tv/videos/xx/xx/yyyyyy.flv

替换为: [视频日志] YYYYYY [/视频日志]

xx可以是2位或3位数,但yyyyyy总是6位数。

示例:

http://play.videolog.tv/videos/93/80/398682.flv至[videolog] 398682 [/ videolog]

2 个答案:

答案 0 :(得分:3)

<强>更新

update MyTable
set MyColumn = concat('[videolog]', replace(SUBSTRING(SUBSTRING_INDEX(MyColumn, '/', -1), 2), '.flv', '[/videolog]'))
where MyColumn like 'http://play.videolog.tv/videos/%'

答案 1 :(得分:0)

在MySQL中完全执行此操作需要一些字符串魔法。我相信这应该有效:

UPDATE posts_table
SET posts_table.post_text = REPLACE(posts_table.post_text, @full_url := MID(posts_table.post_text, @url_start := LOCATE('http://play.videolog.tv/videos/', posts_table.post_text), LOCATE('.flv', posts_table.post_text, @url_start) + 4 - @url_start), 
CONCAT('[videolog]', MID(@full_url, LENGTH(@full_url) - LOCATE('/', REVERSE(@full_url)) + 2, 6), '[/videolog]'))
WHERE LOCATE('http://play.videolog.tv/videos/', posts_table.post_text)

您可以使用此查询对其进行测试:

SELECT REPLACE(posts_table.post_text, @full_url := MID(posts_table.post_text, @url_start := LOCATE('http://play.videolog.tv/videos/', posts_table.post_text), LOCATE('.flv', posts_table.post_text, @url_start) + 4 - @url_start), 
CONCAT('[videolog]', MID(@full_url, LENGTH(@full_url) - LOCATE('/', REVERSE(@full_url)) + 2, 6), '[/videolog]')) AS `result`
FROM posts_table
WHERE LOCATE('http://play.videolog.tv/videos/', posts_table.post_text)

只需使用正确的表/列名称替换posts_table和post_text。

此查询应该替换该URL的所有实例,即使它位于一堆文本的中间。