如何在MYSQL中用空字符串替换最后一个子字符串?我在MYSQL中找不到任何这样的直接函数
字符串:" American Corp National Corp"
搜索字符串:" Corp"
预期产出:" American Corp National"
有人可以建议吗?
答案 0 :(得分:4)
这更短,更易读:
SELECT TRIM(TRAILING 'Corp' FROM 'American Corp National Corp')
答案 1 :(得分:2)
尝试:
select reverse(concat(
left(reverse('American Corp National Corp'),
instr(reverse('American Corp National Corp'),reverse('Corp'))-1),
substr(reverse('American Corp National Corp'),
instr(reverse('American Corp National Corp'),reverse('Corp'))+
length('Corp')))) result
答案 2 :(得分:0)
这感觉就像一种糟糕的方式,但是... reverse
字符串,使用reverse
搜索搜索字符串locate
的第一次出现,然后计算什么索引会在非反转字符串中?
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_reverse
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_locate
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_char-length(非常确定您需要使用此而不是长度才能兼容unicode,但请务必确认!)
工作示例:
字符串:0123456789(char_length = 10)
搜索字符串:567(char_length = 3)
反向字符串:9876543210
反向搜索字符串:765
找到返回索引= 2
真实字符串中的结尾索引= 7(char_length(字符串) - 1 - 索引 - > 10 - 1 - 2)
真实字符串中的起始索引= 5(char_length(字符串) - 1 - (char_length(搜索字符串) - 1) - 索引 - > 10 - 1 - (3 - 1) - 2)
答案 3 :(得分:0)
在自己研究这个问题并阅读上面的答案之后,我创建了以下函数来解决这个问题。在我的情况下,我需要更改序列中的最后一个分隔符,例如," Aap,Noot,Mies"会成为" Aap,Noot&密斯":
CREATE DEFINER=`root`@`localhost` FUNCTION `change_last_substring`(
input_string text,
separator_old tinytext,
separator_new tinytext
) RETURNS text CHARSET utf8
BEGIN
set @output_string=
trim(
leading separator_new from
concat
(
left(input_string,length(input_string)-length(substring_index(input_string,separator_old,-1))-2),
separator_new,
substring_index(input_string,separator_old,-1)
)
);
RETURN @output_string;
END
答案 4 :(得分:0)
accepted answer不会将@FROM
替换为@TO
,而是将@FROM
替换为空字符串。如果您需要将@FROM
替换为@TO
,请修改以下答案:
SELECT reverse(
concat(
concat(
left(reverse(value),
instr(reverse(value), reverse(@FROM)) - 1),
@TO
),
substr(reverse(value),
instr(reverse(value), reverse(@FROM)) +
length(@FROM))))
FROM `table`
WHERE `value` like '%' + @FROM + '%'
请注意附加的WHERE
值like '%' + @FROM + '%'
,因为如果值中没有出现子字符串,例如,这会删除多余的字符。尝试在“ ccc”中将“ a”替换为“ b”会导致“ cc”
答案 5 :(得分:0)
选择 相反( CONCAT( 剩下( 反向(列), 位置( REVERSE('您要替换的字符串')IN REVERSE(列) )), REVERSE('要替换的字符串'), 对( 反向(列), 长度(列)-位置( REVERSE('您要替换的字符串')IN REVERSE(消息) )-LENGTH('您要替换的字符串')+ 1) ) ) 从 桌子;
答案 6 :(得分:0)
更简单,更可靠
CONCAT(SUBSTRING_INDEX('American Corp National Corp','Corp',2), "REPLACE_STRING" ,SUBSTRING_INDEX('American Corp National Corp','Corp',-1))
REPLACE_STRING,您可以使用替换字符串进行更改,也可以将其替换为空。