微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql-基于通配符的SQL查询替换字符串

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

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

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

谢谢

解决方法:

在MySQL 8.0及更高版本中,可以使用REGEX_REPLACE()函数.在absence of the same中,可以完成一些复杂的字符串操作.这基于您的confirmation,该子字符串在一个值中仅出现一次.

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

相反,我们可以尝试提取post_content的一部分.我们将使用Substring_Index()函数在’< p>< span id =“ more-”之前提取前导子字符串.类似地,我们将在'“< / span< / p>之后提取尾随子字符串. “一部分.

现在,我们可以简单地Concat()这些部分来获取所需的post_content.您可以在这里找到使用的各种String函数的详细信息: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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐