Mysql实例mysql split函数多种实现方法
《Mysql实例mysql split函数多种实现方法》要点: 例1,mysql split函数代码. delimiter $$MYSQL教程 drop function if exists `f_split_varchar`$$MYSQL教程 create ??? end$$MYSQL教程 delimiter ;MYSQL教程 下面继续通过几个例子,学习mysql split函数的实现办法.MYSQL教程 想在mysql里把一段用固定符号分隔的字符串,按分隔符分别列出来. 例1: create function `func_get_split_string_total`( f_string varchar(1000),f_delimiter varchar(5) ) returns int(11) begin ? return 1+(length(f_string) - length(replace(f_string,''))); end$$ delimiter ; ? ? delimiter $$ create function `func_get_split_string`( f_string varchar(1000),f_delimiter varchar(5),f_order int) returns varchar(255) charset utf8 begin ? declare result varchar(255) default ''; ? set result = reverse(substring_index(reverse(substring_index(f_string,f_order)),1)); ? return result; end$$ delimiter ; ? 必要设置下参数: 测试下以上mysql split函数的用法,分析下实现原理(脚本学堂 www.jbxue.com 编纂整理): ??? ->?? "t1" varchar(100) default null, ??? ->?? "t2" int(11) default null ??? -> ) engine=myisam default charset=utf8; ? mysql> insert into t(t1,t2) values('a,b,c,d',1); query ok,1 row affected (0.00 sec) ? mysql> insert into t(t1,t2) values('a b c d',2); query ok,1 row affected (0.00 sec) ? mysql> select * from t; +---------+------+ | t1????? | t2?? | +---------+------+ | a,d |??? 1 | | a b c d |??? 2 | +---------+------+ 2 rows in set (0.00 sec) 首先,用func_get_split_string_total函数得到符合匹配的数量. +-------------------------------------+ | func_get_split_string_total(t1,') | +-------------------------------------+ |??????? 4 | +-------------------------------------+ 1 row in set (0.00 sec) 然后,用func_get_split_string得出想要的字符串 +---------------------------------+ | func_get_split_string(t1,1) | +---------------------------------+ | a??? | +---------------------------------+ 1 row in set (0.00 sec) ? mysql> select func_get_split_string(t1,2) from t where t2=1; +---------------------------------+ | func_get_split_string(t1,2) | +---------------------------------+ | b??? | +---------------------------------+ 1 row in set (0.00 sec) ? mysql> select func_get_split_string(t1,3) from t where t2=1; +---------------------------------+ | func_get_split_string(t1,3) | +---------------------------------+ | c??? | +---------------------------------+ 1 row in set (0.00 sec) ? mysql> select func_get_split_string(t1,4) from t where t2=1; +---------------------------------+ | func_get_split_string(t1,4) | +---------------------------------+ | d??? | +---------------------------------+ 1 row in set (0.00 sec) ? 当然,这只是个思路,如果你想把所有字符串都列出来,可以写个过程,在其中循环下也是可以的.MYSQL教程 为了更好的掌握mysql split函数的实现办法,大家可以研究一下下面的几个例子.MYSQL教程 例1,自定义mysql split函数实现 获取按指定字符分割的字符串的个数: ? drop function if exists `sims`.`func_get_split_string_total`$$? ? create definer=`root`@`localhost` function `func_get_split_string_total`(? f_string varchar(1000),f_delimiter varchar(5)? ) returns int(11)? begin? ? declare returnint int(11);? ? if length(f_delimiter)=2? then? ???? return 1+(length(f_string) - length(replace(f_string,'')))/2;? ? else????? ???? return 1+(length(f_string) - length(replace(f_string,'')));? ? end if;? end$$? ? delimiter ;? ? 测试: ? drop function if exists `sims`.`func_get_split_string`$$? ? create definer=`root`@`localhost` function `func_get_split_string`(? f_string varchar(1000),f_order int) returns varchar(255) charset utf8? begin? ? declare result varchar(255) default '';? ? set result = reverse(substring_index(reverse(substring_index(f_string,1));? ? return result;? end$$? ? delimiter ;? 测试: begin ?declare i int(4);? ?declare dictcode varchar(100);? ?declare dictname varchar(100);? ?declare returnstr varchar(100);?? ? ?set i = 1;? ?set returnstr = '';??????? ?? ?if(v_str is null or length(v_str)=0) then? ????? return returnstr;? ?else? ?? ?while i<=func_get_split_string_total(v_str,'||')? ?do? ????? set dictcode = func_get_split_string(v_str,i);? ????? select names into dictname from sims_dd_dict where code = dictcode;?? ????? set returnstr = concat(returnstr,dictname);? -- 这里要用中文的逗号,不然导出excel的时候会串行,因为程序中是以逗号分隔的? ?set i = i+1;? ?end while;? ??? ?set returnstr = substring(returnstr,2);?? ?return returnstr;? ??? ?end if;? end$$? 欢迎参与《Mysql实例mysql split函数多种实现方法》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |