2010-12-23 115 views

回答

3

更新:

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

@virendar:我读得太快,并没有意识到* xx *值是数字。看到我上面的更新版本。 – RedFilter 2010-12-24 02:31:03

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的所有实例,即使它位于一堆文本的中间。