【问题标题】:SQL query to replace string based on wildcardt基于通配符替换字符串的 SQL 查询
【发布时间】:2019-04-16 12:40:38
【问题描述】:

我想在我的 WP 数据库上运行这种类型的查询,以删除所有 id="more-" 的 span 实例:

UPDATE wp_posts SET post_content = REPLACE (
post_content,
'<p><span id="more-35075"></span></p>',
'');

但在我的示例中,“more-”后面的数字是一个变量。如何用通配符之类的东西编写这个查询:span id="more-*.

谢谢

【问题讨论】:

  • 您使用的是 MySQL 服务器 8.0 及以上版本吗?
  • 一个更好的问题 imo 是为什么您将 html 存储在数据库中而不是仅存储 id 和帖子内容。然后您可以使用您的应用程序来格式化 HTML
  • 用 MySQL 处理 HTML 可能在极其微不足道的情况下工作,但如果没有适当的 HTML 解析器,任何甚至远程复杂的事情基本上都是不可能的。
  • @Rogue 他没有存储。 Wordpress 正在存储它(表名是wp_posts);很可能 OP 无法控制它。
  • 他使用的任何 wordpress 插件肯定都有某种方式被操纵以不做……糟糕的事情?

标签: mysql wordpress replace phpmyadmin mariadb


【解决方案1】:

在 MySQL 8.0 及以上版本中,您可以使用REGEX_REPLACE() 函数。在absence of the same,可以做一些复杂的字符串操作。这是基于您的confirmation,即所述子字符串在一个值中仅出现一次。

REPLACE() 不支持通配符、模式、正则表达式等。它只会将给定的 fixed 子字符串替换为更大的字符串中的另一个 fixed 子字符串.

相反,我们可以尝试提取post_content 的部分内容。我们将使用Substring_Index() 函数提取'&lt;p&gt;&lt;span id="more-' 之前的前导子字符串。同样,我们将在'"&gt;&lt;/span&gt;&lt;/p&gt;' 部分之后提取尾随子字符串。

现在,我们可以简单地Concat() 这些部分来获得所需的post_content。您可以在此处找到使用的各种字符串函数的详细信息:https://dev.mysql.com/doc/refman/8.0/en/string-functions.html

我还添加了WHERE 条件,以便我们只选择符合给定子字符串条件的行。

UPDATE wp_posts 
SET post_content = 
CONCAT( 
       SUBSTRING_INDEX(post_content, 
                       '<p><span id="more-', 
                       1), 
       SUBSTRING(post_content, 
                 LOCATE('"></span></p>', 
                        post_content, 
                        LOCATE('<p><span id="more-',
                               post_content)
                        ) + 13) -- 13 is character length of "></span></p>
      )
WHERE post_content LIKE '%<p><span id="more-%"></span></p>%';

查询 #1:更新操作之前的数据

SELECT * FROM wp_posts;

| post_content                                            |
| ------------------------------------------------------- |
| adasdaadsa<p><span id="more-35075"></span></p>121324124 |
| 1412123123<p><span id="more-232"></span></p>adasdaafas  |

查询 #2:更新操作后的数据

SELECT * FROM wp_posts;

| post_content         |
| -------------------- |
| adasdaadsa121324124  |
| 1412123123adasdaafas |

View on DB Fiddle

【讨论】:

  • 你好马杜尔。谢谢您的帮助!我启动了 SQL 查询,但收到消息:0 行受影响。
  • @APEWAW 你能设置一个db-fiddle.com 还检查我共享的数据库小提琴链接。也许您的示例数据中有一些不同。
  • 我的错!并不总是有

    标签,所以我调整了查询​​并且它运行良好。非常感谢您的宝贵帮助!

猜你喜欢
  • 2012-02-01
  • 2011-10-05
  • 1970-01-01
  • 2019-08-12
  • 2014-07-03
  • 2020-06-09
  • 2023-02-23
  • 2012-07-10
  • 2012-11-21
相关资源
最近更新 更多