Mysql 如果年份出现在字符串末尾,如何更改字符串中的年份?

Mysql 如果年份出现在字符串末尾,如何更改字符串中的年份?,mysql,wordpress,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'

我试图在我的表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%';
但它不起作用,因为我的永久链接变成了

此外,在本专栏中,我还有另一个无需更改的slug,只想更改slug中包含年份的年份

如果年份出现在字符串末尾,如何更改字符串中的年份

感谢您的帮助。

您可以使用正则表达式将slug与有效的年份值进行匹配;这一个查找以4位数字结尾的slug值。然后,我们使用
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

您不能按相反的顺序运行更新吗?首先将2017年设置为2018年,然后将2016年设置为2017年,以此类推?为什么不以相反的顺序运行这些更新查询?感谢您的回答@waka和Nico,但它不起作用,因为如果我以相反的顺序运行这些更新查询,它将发生变化:首先,2017年的2018年,然后它将在2016年更改所有的2017年,等等。您好@P.Salmon,几乎是一样的是的,大约两天前的答案很好,对我来说很有用。但现在我不想做同样的事情,或者它可能会起作用,但如果我像我在帖子中说的那样做,它会把所有没有年份的slug放在类似“-1”的位置,当你说没有年份时,你的意思是slug有时会存储为null或其他什么。对于像“category2018”、“string2018”这样的slug,我能做些什么呢?我还想把它们命名为“category2017”,“string2017”,而不仅仅是“2018”这个词?我已经编辑了我的问题Nick,也许现在对你的理解更好。@Tweak这一年会发生在字符串中的任何地方吗?e、 g.“2013Staff”、“2014年我的”等等?不@Nick,它总是在我的字符串末尾。类似于“2012”、“doc2012”、“category2013”、“stuff2014”等。你们有什么版本的MySQL?