我想在我的查询中替换字符串,但只在字符串的末尾,这是我的例子:
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'。
谢谢你的帮助
答案 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'
结尾也能正常工作。