sql查询

fnatzsnv  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(255)

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

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

但在我的例子中,跟在“more-”后面的数字是一个变量。如何使用通配符之类的内容编写此查询:span id=“more-*”。
谢谢您

tvz2xvvm

tvz2xvvm1#

在mysql 8.0及更高版本中,您可以使用 REGEX_REPLACE() 功能。如果没有相同的操作,则可以执行一些复杂的字符串操作。这是基于您的确认,即所述子字符串在一个值中只出现一次。 REPLACE() 不支持任何通配符、模式、正则表达式等。它只将给定的固定子字符串替换为更大字符串中的另一个固定子字符串。
相反,我们可以尝试提取 post_content . 我们将在 '<p><span id="more-' 使用 Substring_Index() 功能。类似地,我们将在 '"></span></p>' 部分。
现在,我们可以简单地 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 |

db fiddle视图

相关问题