如果最后2个字符匹配,则SQL替换最后2个字符

时间:2015-05-23 13:23:18

标签: mysql regex where-clause

我希望有人可以帮助我。我有一个160.000行的列。很多这些列值(永久链接)以“-2”结尾,这是不必要的,所以我想删除它们。但我无法让它发挥作用。

我使用以下查询尝试了它:

UPDATE wp_pods_cars
SET permalink = Replace(permalink,'-2','')
WHERE RIGHT( 'permalink' , 2 ) = '-2';

此查询似乎有效,但RIGHT()似乎会产生麻烦。可能它只能用于SELECT而不是WHERE子句。

我在考虑正则表达式,但我也没有这样做。我已经无法为我的案例找到合适的正则表达式。

2 个答案:

答案 0 :(得分:1)

列名称周围有单引号,因此您要比较where子句中的常量字符串。更接近工作的版本是:

UPDATE wp_pods_cars
    SET permalink = Replace(permalink,'-2','')
    WHERE RIGHT(permalink, 2 ) = '-2';

但是,我会把它写成:

UPDATE wp_pods_cars
    SET permalink = LEFT(permalink, length(permalink) - 2) 
    WHERE permalink LIKE '%-2';

-2可能会出现在字符串中的其他位置,您不希望删除所有匹配项。

答案 1 :(得分:0)

首先根据Oleg的评论从列名中删除引号。这可能是符合您标准的另一个解决方案,MySQL SUBSTRING函数提取字符串的一部分,CHAR_LENGTH函数计算的数量字符串中的字符&最后将其分配给permalink

 UPDATE wp_pods_cars
  SET permalink = SUBSTRING(permalink, 1, CHAR_LENGTH(permalink) - 2) 
 WHERE permalink LIKE '%-2';

更多关于:

SUBSTRING

CHAR_LENGTH