SQL - 从[剧透:abcdefgh]到[剧透]

时间:2013-05-18 16:38:10

标签: mysql sql replace

我在许多记录[spoiler:abcdefgh]中都有这个字符串。 abcdefgh是可变字符。我希望这成为[spoiler]。所以我想删除:abcdefgh

我知道查询是:

UPDATE post 
SET pagetext = replace(pagetext, ‘text you want to replace’, ‘replacament text’);

如何替换变量字符?

例如,如果我有[center:uezfbb79]texttt[/center:uezfbb79],那么我希望它成为:[center]texttt[/center]

“uezfbb79”未修复,这些是随机字符。

1 个答案:

答案 0 :(得分:0)

假设所有标记格式正确,以下代码应该可以解决问题。请在针对生产副本运行之前测试 throroughly

UPDATE post
SET pagetext = REPLACE(pagetext, SUBSTR(pagetext, INSTR(pagetext,':'), INSTR(pagetext, ']') - INSTR(pagetext,':')), '')
WHERE pagetext LIKE '[%:%]';

这是 SQL Fiddle 我用于非常有限测试。

修改

此脚本应正确处理前面的[]情况:

UPDATE post
SET pagetext = REPLACE(pagetext, SUBSTR(pagetext, @c1:=INSTR(pagetext,':'), LOCATE(']', pagetext, @c1) - @c1), '')
WHERE pagetext LIKE '[%:%]';

<强> Updated Fiddle

编辑#2

我的WHERE条款限制性太强。这是一个略微更新的脚本:

UPDATE post
SET pagetext = REPLACE(pagetext, SUBSTR(pagetext, @c1:=INSTR(pagetext,':'), LOCATE(']', pagetext, @c1) - @c1), '')
WHERE pagetext LIKE '%[%:%]%';

我更改了 Fiddle 以更新另一列(newtext),因此更容易判断结果。