mysql 字符串去重

        

        把“aa,bb,cc,dd,aa,bb,cc,dd” 字符串中重复的内容去除。 还是用截取的方式,一个一个截取,然后进行拼接,拼接前用find_in_set函数来判断,是否已经存在? 如果不存在,进行拼接,存在就忽略,继续往下查找。

函数:

ROP PROCEDURE IF EXISTS func_remove_duplicates;
 
DELIMITER $$
  
CREATE  FUNCTION  func_remove_duplicates(inputString VARCHAR(4000))
RETURNS VARCHAR(4000)
BEGIN
    DECLARE startPos INT;
    DECLARE endPos INT;
    DECLARE element VARCHAR(255);
    DECLARE outputString VARCHAR(4000) DEFAULT ''; 
    SET outputString  = SUBSTRING_INDEX(inputString, ',', 1);	
    -- 遍历字符串中的每个元素
    string_loop: LOOP
        -- 查找下一个逗号的位置
        SET startPos = IFNULL(LOCATE(',', inputString), 0);
        
        -- 如果找不到逗号,说明已经到了最后一个元素
        IF startPos = 0 THEN
            SET element = inputString;
        ELSE
            SET element = SUBSTRING(inputString, 1, startPos - 1);
        END IF;


        -- 添加元素到输出字符串,如果元素不在输出字符串中
        IF FIND_IN_SET(element, outputString) = 0 THEN
            SET outputString = CONCAT(outputString, ',', element);
        END IF;


        -- 如果已经到达字符串末尾,则退出循环
        IF startPos = 0 THEN
            LEAVE string_loop;
        END IF;


        -- 剔除已处理的元素并继续下一个迭代
        SET endPos = LENGTH(inputString);
        SET inputString = SUBSTRING(inputString, startPos + 1, endPos); 
    END LOOP;
 
    RETURN outputString;
END$$


DELIMITER ;

调用:

SELECT func_remove_duplicates('aa,bb,cc,dd,aa,bb,cc,dd');

过程:

ROP PROCEDURE IF EXISTS pro_remove_duplicates;


DELIMITER $$
 
CREATE   PROCEDURE pro_remove_duplicates(inputString VARCHAR(255), OUT outputString VARCHAR(255))
BEGIN
    DECLARE startPos INT;
    DECLARE endPos INT;
    DECLARE element VARCHAR(255);


    -- 初始化 outputString
    SET outputString = SUBSTRING_INDEX(inputString, ',', 1);	


    -- 遍历字符串中的每个元素
    string_loop: LOOP
        -- 查找下一个逗号的位置
        SET startPos = IFNULL(LOCATE(',', inputString), 0);
        
        -- 如果找不到逗号,说明已经到了最后一个元素
        IF startPos = 0 THEN
            SET element = inputString;
        ELSE
            SET element = SUBSTRING(inputString, 1, startPos - 1);
        END IF;


        -- 添加元素到输出字符串,如果元素不在输出字符串中
        IF FIND_IN_SET(element, outputString) = 0 THEN
            SET outputString = CONCAT(outputString, ',', element);
        END IF;


        -- 如果已经到达字符串末尾,则退出循环
        IF startPos = 0 THEN
            LEAVE string_loop;
        END IF;


        -- 剔除已处理的元素并继续下一个迭代
        SET endPos = LENGTH(inputString);
        SET inputString = SUBSTRING(inputString, startPos + 1, endPos); 
    END LOOP;
    -- 输出内容
    SELECT outputString;
END$$


DELIMITER ;

   调用:

 CALL pro_remove_duplicates('aa,bb,cc,dd,aa,bb,cc,dd', @result);

总结:

        mysql字符串去重,一般都是程序那边处理,很少sql去处理,如果是mysql事件里面调用,就用过程去处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值