MySQL使用可变数字搜索/替换

时间:2014-04-05 17:00:19

标签: mysql sql regex

我有一些字符串需要使用SQL查询在我的数据库中替换。字符串是:

  

[附件= ] image.jpg的[/ attacment]

我想用图像标签包装那个image.jpg,但 NUMBER 让我搞砸了,因为每个字符串都会有所不同。我可以在此查询中使用通配符来查找任何数字吗?

这是我的搜索/替换查询:

UPDATE `hd_posts`
SET `post_content` = 
       replace(post_content, 
               '[attachment=NUMBER]', 
               '<img src="http://mydomain.com/my-theme/images/')

然后......

UPDATE `hd_posts`
 SET `post_content` = replace(post_content, '[/attachment]', '" />')

......所以我最终会这样:

<img src="http://mydomain.com/my-theme/images/image.jpg" />

有人可以帮忙吗?我对 NUMBER 使用了什么?我觉得这不是太难,但我是一个完整的新手。当然,我已经搜索过并搜索过,但我无法在任何地方找到这种确切的情况。这两个几乎给了我我需要的东西:

MySQL REPLACE variable string Search & replace in MySql, using regex

但并不完全。我还是很困惑!谢谢你的帮助。

如果我以第一个链接为例......

UPDATE `hd_posts` 
  SET `post_content` = 
         CONCAT(SUBSTRING(post_content, 1, 
                          INSTR(post_content,'[attachment') - 1),
                SUBSTRING(post_content, 
                          INSTR(post_content, ']'), 
                          LENGTH(post_content) 
                            - INSTR(post_content, '[attachment'))
                )

我不知道......在那个例子中,他试图用&#39;&#39;替换字符串。 (删除它),但我不知道他是如何做到的,我也不知道如何从中学到足够的东西来做我需要做的事。

1 个答案:

答案 0 :(得分:0)

  

[attachment=NUMBER]image.jpg[/attacment]

[/attacment]中有拼写错误。遗失了h字母 将其更改为[/attachment]

如果内容的格式始终如此,那么

set @pc := '[attachment=NUMBER]image.jpg[/attachment]';
set @instr := INSTR(@pc, ']');
set @start_tag := substring(@pc, 1, @instr);
set @end_tag := '[/attachment]';
set @image_url := 
  replace(
    replace( @pc, @start_tag, 
             '<img src="http://mydomain.com/my-theme/images/'
    ), @end_tag, '" />');

select @pc;
+-------------------------------------------+
| @pc                                       |
+-------------------------------------------+
| [attachment=NUMBER]image.jpg[/attachment] |
+-------------------------------------------+

select @instr, @start_tag, @end_tag;
+--------+---------------------+---------------+
| @instr | @start_tag          | @end_tag      |
+--------+---------------------+---------------+
|     19 | [attachment=NUMBER] | [/attachment] |
+--------+---------------------+---------------+

select @image_url;
+-------------------------------------------------------------+
| @image_url                                                  |
+-------------------------------------------------------------+
| <img src="http://mydomain.com/my-theme/images/image.jpg" /> |
+-------------------------------------------------------------+

演示 @ SQL Fiddle

您的更新声明可以是:

UPDATE hd_posts
SET post_content = 
       replace(
        replace( @pc:=post_content, substring( @pc, 1, INSTR( @pc, ']' ) ), 
                 '<img src="http://mydomain.com/my-theme/images/'
        ), '[/attachment]', '" />' )