需求:
在工作中有时会遇到这种情况,有一个字符串为
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
网友评论