开发中使用mysql5.7版本数据库,对于英文逗号拼接的字符串,想要替换其中指定的字符串,找不到数据库函数支持,自己写了一个,实测好用,效率可以,放心用!
/*类似find_in_set,按英文逗号拆分字段,找出指定的旧字符串,替换成新字符串,并重新按逗号拼接返回,注意,如果原字符串首尾是英文逗号,调用此方法后会自动清除*/
CREATE DEFINER=`root`@`%` FUNCTION `rwgl`.`replace_in_set`(str VARCHAR(4096), oldStr VARCHAR(255), newStr VARCHAR(255)) RETURNS varchar(4096) CHARSET utf8mb4
BEGIN
DECLARE result VARCHAR(4096) DEFAULT '';
DECLARE temp VARCHAR(255) DEFAULT '';
DECLARE pos INT DEFAULT 1;
DECLARE commaPos INT DEFAULT 0;
WHILE (pos < LENGTH(str)) DO
SET commaPos = LOCATE(',', str, pos);
IF commaPos = 0 THEN
SET commaPos = LENGTH(str) + 1;
END IF;
SET temp = SUBSTRING(str, pos, commaPos - pos);
IF temp = oldStr THEN
SET temp = newStr;
END IF;
IF result = '' THEN
SET result = temp;
ELSE
SET result = CONCAT(result, ',', temp);
END IF;
SET pos = commaPos + 1;
END WHILE;
RETURN result;
END
示例:
select replace_in_set('aaa,bbb,bbbbb,cccc','bbb','嘿嘿嘿')
返回
aaa,嘿嘿嘿,bbbbb,cccc