在MySQL 8.0及以上版本中,您可以使用REGEX_REPLACE()功能。在没有相同的,可以进行一些复杂的字符串操作。这是根据你的确认,该子字符串在一个值中仅出现一次。
REPLACE()不支持通配符、模式、正则表达式等。它仅替换给定的fixed与另一个子串fixed子字符串,在更大的字符串中。
相反,我们可以尝试提取部分post_content
。我们将提取之前的前导子字符串'<p><span id="more-'
using 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 上查看