В MySQL версии 8.0 и выше вы можете использовать функцию REGEX_REPLACE()
. При отсутствии того же могут выполняться некоторые сложные строковые операции. Это основано на вашем подтверждении , что указанная подстрока встречается только один раз в значении.
REPLACE()
не поддерживает подстановочные знаки, шаблоны, регулярные выражения и т. Д. Он только заменяет данную фиксированную подстроку другой фиксированной подстрокой, в большей строке.
Вместо этого мы можем попытаться извлечь части из post_content
. Мы извлечем ведущую подстроку перед '<p><span id="more-'
, используя функцию Substring_Index()
. Точно так же мы извлечем конечную подстроку после части '"></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 |
Просмотр на БД Fiddle