在MySQL中REPLACE字符串但只指定了部分

时间:2014-03-22 19:28:17

标签: mysql replace

我想在我的查询中替换字符串,但只在字符串的末尾,这是我的例子:

SET @exampleString = 'example_a_chapter_a';

SELECT REPLACE(@exampleString ,'_a','_b1');

结果我得到的是: example_b1_chapter_b1 但我想这样: example_a_chapter_b1

但字符串中的'_ a'可能会有更多时间,因为'example_a_type_a_chapter_a',但 我想替换字符串的结尾'_ a'

谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

这很棘手,因为MySQL无法用正则表达式代替。可能的方法之一是:

SELECT REPLACE(REPLACE(CONCAT(@exampleString, '#END'), '_a#END', '_b1'), '#END', '');

-i.e。添加100%不在原始字符串中的内容,结束然后替换。

修改:如果原始字符串不以REPLACE结尾,则需要第二个_a(因此您需要删除添加的#END

答案 1 :(得分:2)

根本无法使用replace()。只需重建字符串:

select (case when @exampleString like '%_a'
             then concat(left(@exampleString, length(@exampleString) - length('_a')),
                         '_b1'
                        )
             else @exampleString
         end)

这样做的好处是即使字符串没有以'_a'结尾也能正常工作。