mysql的find_in_set怎么替换,仿照find_in_set写一个replace_in_set函数,英文逗号拼接字符串指定替换,replace部分内容

开发中使用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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值