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

时间:2018-11-13 16:12:08

标签: mysql wordpress replace phpmyadmin mariadb

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

img_m = sitk.ConnectedThreshold(img2[:,:,7], [(257,419)])

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

谢谢

1 个答案:

答案 0 :(得分:2)

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

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

相反,我们可以尝试提取var something = "apple"; var yesOrNo = something == "apple" ? "yes" : "no"; var result = $"Is it an apple? {yesOrNo}!"; 的一部分。我们将使用Substring_Index()函数在post_content之前提取前导子字符串。同样,我们将提取'<p><span id="more-'部分之后的结尾子字符串。

现在,我们只需Concat()这些部分即可获得所需的'"></span></p>'。您可以在此处找到各种String函数的详细信息:https://dev.mysql.com/doc/refman/8.0/en/string-functions.html

我还添加了一个post_content条件,以便我们仅选择与给定子字符串条件匹配的行。

WHERE

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

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>%';

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

SELECT * FROM wp_posts;

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

View on DB Fiddle