Как изменить год в строке, где год встречается в конце строки? - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь увеличить столбец в моей таблице wp_terms.

У меня есть

UPDATE wp_terms
SET slug = REPLACE(slug, '2009', '2008');

UPDATE wp_terms
SET slug = REPLACE(slug, '2010', '2009');

UPDATE wp_terms
SET slug = REPLACE(slug, '2011', '2010');

UPDATE wp_terms
SET slug = REPLACE(slug, '2012', '2011');

UPDATE wp_terms
SET slug = REPLACE(slug, '2013', '2012');

UPDATE wp_terms
SET slug = REPLACE(slug, '2014', '2013');

UPDATE wp_terms
SET slug = REPLACE(slug, '2015', '2014');

UPDATE wp_terms
SET slug = REPLACE(slug, '2016', '2015');

UPDATE wp_terms
SET slug = REPLACE(slug, '2017', '2016');

UPDATE wp_terms
SET slug = REPLACE(slug, '2018', '2017');

Проблема в том, что годы будут автоматически заменены на другие. Например: 2008 заменен на 2009 в первой строке. На втором 2009 год будет заменен на 2010 год. Но это повлияет на мое первое обновление, поскольку весь 2009 год будет заменен на 2010 год.

Моя идея состоит в том, что я хочу изменить их одновременно:

update wp_terms
set slug = slug - 1
WHERE name LIKE '%20%';

Но это не сработало, потому что моя постоянная ссылка стала чем-то вроде

http://localtestwww.mywebsite.com/category/-1/

Более того, в этой колонке у меня также есть еще один слаг, который не нужно менять, я просто хочу поменять годы слага, которые содержат годы.

Как изменить год в строке, где год встречается в конце строки?

Спасибо за помощь.

1 Ответ

1 голос
/ 06 мая 2019

Вы можете использовать RLIKE, чтобы сопоставить слаг с действительными значениями года, используя регулярное выражение;этот ищет значение слага, оканчивающееся на 4 цифры.Затем мы используем LEFT и RIGHT для извлечения строки и завершающего года, из которого мы вычитаем одну, прежде чем объединяем две части вместе:

UPDATE wp_terms
SET slug = CONCAT(LEFT(slug, LENGTH(slug) - 4), RIGHT(slug, 4) - 1)
WHERE slug RLIKE '[[:digit:]]{4}$' AND RIGHT(slug, 4) > 2008

Демонстрация на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...