美文网首页
Mysql:函数拆分字符串后去重

Mysql:函数拆分字符串后去重

作者: taogan | 来源:发表于2021-07-09 12:18 被阅读0次
需求

在工作中有时会遇到这种情况,有一个字符串为

a,b,c,d,e,f,g,a,c,f,g

可以发现,字符串中有很多重复的字符,下面是解决方案:

定义函数一(获取分割后的字符串数量):
CREATE FUNCTION `separator_str_len`(str VARCHAR(225), separator_str CHAR(1)) RETURNS int(10)
BEGIN
    RETURN (LENGTH(str) - LENGTH(REPLACE(str, separator_str, '')))+1;
END
定义函数二(根据下标获取指定位置的字符):
CREATE FUNCTION `separator_str`(str VARCHAR(225), separator_str CHAR(1), idx int(10)) RETURNS varchar(50) CHARSET utf8
BEGIN
    RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(str, separator_str, idx), separator_str, -1);
END
定义函数三(去重字符串):
CREATE FUNCTION `separator_str_distinct`(str VARCHAR(225), separator_str CHAR(1)) RETURNS varchar(225) CHARSET utf8
BEGIN
    DECLARE size INT DEFAULT separator_str_len(str, separator_str);
    DECLARE i INT DEFAULT 0;
    DECLARE tmp VARCHAR(50);
    DECLARE str_distinct VARCHAR(225) DEFAULT '';
    WHILE i < size DO
        SET i = i + 1;
        SET tmp = separator_str(str, separator_str, i);
        SET str_distinct = if(FIND_IN_SET(tmp, str_distinct) > 0, str_distinct, CONCAT(str_distinct, separator_str, tmp));
    END WHILE;
    RETURN RIGHT(str_distinct, CHAR_LENGTH(str_distinct) - 1);
END

运行结果:


image.png

相关文章

网友评论

      本文标题:Mysql:函数拆分字符串后去重

      本文链接:https://www.haomeiwen.com/subject/mqkfpltx.html