如何在字符串的结尾处更改年份?

时间:2019-05-06 08:09:26

标签: mysql wordpress

我正在尝试增加表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 个答案:

答案 0 :(得分:1)

您可以使用RLIKE使用正则表达式将子弹与有效的年份值匹配;此代码查找以4位数字结尾的子弹值。然后,我们使用LEFTRIGHT提取字符串和结尾年份,在将这两部分重新组合在一起之前,我们先减去其中的一个:

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

Demo on dbfiddle