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事件里面调用,就用过程去处理。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL中常用的字符串连接函数有以下三个:CONCAT、CONCAT_WS、GROUP_CONCAT。 1. CONCAT函数是用于连接两个或多个字符串的函数。它接受任意数量的字符串参数,并按照它们在参数列表中的顺序进行连接。例如,CONCAT('Hello', 'World')将返回'HelloWorld'。 2. CONCAT_WS函数也是用于连接多个字符串的函数,但它可以指定一个分隔符来在字符串之间添加分隔符。分隔符作为第一个参数,后面跟着要连接的字符串。例如,CONCAT_WS('-', 'First', 'Second', 'Third')将返回'First-Second-Third'。如果某个字符串为NULL,CONCAT_WS函数会忽略该字符串并继续连接其他字符串。 3. GROUP_CONCAT函数用于将多个字符串连接成一个字符串,并可以对字符串进行去重、排序和指定分隔符。它通常与GROUP BY语句一起使用,用于将分组后的多个值连接成一个字符串。例如,GROUP_CONCAT(DISTINCT name ORDER BY age SEPARATOR ', ')将返回按照age字段排序并用逗号分隔的所有不重复的name值的字符串。 所以,如果你需要在MySQL中进行字符串连接操作,可以使用CONCAT、CONCAT_WS和GROUP_CONCAT函数来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL字符串拼接函数](https://blog.csdn.net/qq_38310244/article/details/126019949)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MySQL字符串拼接函数介绍](https://blog.csdn.net/ximenjianxue/article/details/105087458)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天狼1222

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

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

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

打赏作者

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

抵扣说明:

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

余额充值