【问题标题】:MySQL Search/Replace with a variable numberMySQL搜索/替换为变量号
【发布时间】:2014-04-06 06:08:36
【问题描述】:

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

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

我想用 HTML 图像标签包装该 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'))
                )

我不知道...在那个例子中,他试图用 '' 替换一个字符串(删除它),但我不知道他是如何做到的,我不知道我该如何学习从中足以做我需要做的事情。

【问题讨论】:

  • 您在第一个链接上也有一个正确的答案来满足您的要求。
  • 那么,我应该这样做: 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, '&add_id'))) 我不敢尝试,但这行得通吗?这是一个巨大的数据库,所以如果我搞砸了,从备份中恢复将是一个很大的麻烦。
  • 不,那行不通,因为有两个右括号:']'
  • @Ravinder 我忘记在上面的评论中将 '&add_id' 替换为 '[attachment',但如果您能在此为我提供任何帮助,我将不胜感激。
  • 您拥有的确切字符串格式是什么?将其发布在问题中。请不要在 cmets 中。

标签: mysql sql regex


【解决方案1】:

[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]', '" />' )

【讨论】:

  • 哇,你太棒了!这比我预期的要复杂得多。我不能感谢你的专业知识。完美运行。
猜你喜欢
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 2019-09-18
相关资源
最近更新 更多