用replace变量更新mysql数据

时间:2014-01-01 18:14:29

标签: mysql

我有这样的文字:

<p>[img ret872154ftu] fileaddress [/img ret872154ftu]</p>
<p>[img fd68721cvn] fileaddress [/img fd68721cvn]</p>
<p>[img xdfh654t] fileaddress [/img xdfh654t]</p>

我喜欢改变这个

<p>[img] fileaddress [/img]</p>
<p>[img] fileaddress [/img]</p>
<p>[img] fileaddress [/img]</p>

此代码经过测试但未运行

 UPDATE `table` SET `name` = replace(`name`, '[img (anything)', '[/img]');

请帮助

1 个答案:

答案 0 :(得分:2)

如果你在fileaddress之前和之后总是有空格,这将提取fileaddress部分:

SUBSTRING_INDEX(
  SUBSTRING_INDEX(name, '] ', -1),
  ' [', 1);

然后您可以使用此更新查询:

UPDATE `table`
SET `name` = CONCAT(
               '<p>[img] ',
               SUBSTRING_INDEX(
                 SUBSTRING_INDEX(name, '] ', -1),
                 ' [', 1),
               ' [/img]</p>');

请参阅小提琴here

编辑:遗憾的是,MySQL对正则表达式的支持非常有限。您可以尝试使用这种快速而肮脏的解决方案,在多种情况下它可能会失败,但它可能会起作用:

UPDATE tablename
SET
  name = 
  CONCAT(
    SUBSTRING_INDEX(name, '[img', 1),
    '[img]',
   SUBSTRING_INDEX(
    SUBSTRING_INDEX(
      SUBSTRING_INDEX(name, '[img', -1),
      '[/img',
      1),
    ']',
    -1),
    '[/img]',
    SUBSTRING_INDEX(name, ']', -1)
  )

小提琴是here