首先,大家要知道的是,在mysql中并没有split函数,需要自己写。 比如下面几个mysql split函数的例子。 复制代码 代码示例:
DELIMITER $$
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,f_delimiter,'')))/2; else return 1+(length(f_string) - length(replace(f_string,f_delimiter,''))); end if; END$$ DELIMITER ; 调用: 复制代码 代码示例:
DELIMITER $$
DROP FUNCTION IF EXISTS `sims`.`func_get_split_string`$$ CREATE DEFINER=`root`@`localhost` 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_delimiter,f_order)),f_delimiter,1)); return result; END$$ DELIMITER ; 调用:func_get_split_string('abc||def||gh','||',2) 复制代码 代码示例:
CREATE DEFINER=`root`@`localhost` FUNCTION `getDictName`(v_str varchar(100)) RETURNS varchar(100) CHARSET utf8
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; ---//(脚本学堂 www.jbxue.com 编辑整理) end while; set returnStr = subString(returnStr,2); return returnStr; end if; END$$ 在mysql数据库中使用split,有时要考虑接收返回值的问题,下面来看两个例子。 例1,mysql使用split接收返回值。 复制代码 代码示例:
DELIMITER $$;
DROP FUNCTION IF EXISTS `func_getSplitCount`$$ CREATE FUNCTION `func_getSplitCount`( f_string varchar(1000),f_delimit varchar(5) ) RETURNS int(11) BEGIN return 1+(length(f_string) - length(replace(f_string,f_delimit,''))); END$$ DELIMITER ;$$ DELIMITER $$; DROP FUNCTION IF EXISTS `func_getSplitCount`$$ CREATE FUNCTION `func_getSplitCount`( f_string varchar(1000),f_delimit varchar(5) ) RETURNS int(11) BEGIN return 1+(length(f_string) - length(replace(f_string,f_delimit,''))); END$$ DELIMITER ;$$ 例2: 复制代码 代码示例:
DELIMITER $$;
DROP FUNCTION IF EXISTS `func_getSplitString`$$ CREATE FUNCTION `func_getSplitString`( f_string varchar(1000),f_delimit varchar(5),f_order int ) RETURNS varchar(255) BEGIN declare result varchar(255) default ''; set result = reverse(substring_index(reverse(substring_index(f_string,f_delimit,f_order)),f_delimit,1)); return result; END$$ DELIMITER ;$$ DELIMITER $$; DROP FUNCTION IF EXISTS `func_getSplitString`$$ CREATE FUNCTION `func_getSplitString`( f_string varchar(1000),f_delimit varchar(5),f_order int ) RETURNS varchar(255) BEGIN declare result varchar(255) default ''; set result = reverse(substring_index(reverse(substring_index(f_string,f_delimit,f_order)),f_delimit,1)); return result; END$$ DELIMITER ;$$ 参考文档:mysql实现字符串分割SPLIT函数的四种方法 最后,通过几个例子,仔细体会下mysql中split函数的实现与用法。 先设置:SET GLOBAL log_bin_trust_function_creators = 1; 代码: 复制代码 代码示例:
DELIMITER $$
CREATE FUNCTION `func_get_splitStringTotal`( f_string varchar(10000),f_delimiter varchar(50) ) RETURNS int(11) BEGIN return 1+(length(f_string) - length(replace(f_string,f_delimiter,''))); END$$ DELIMITER ; 2,函数func_splitString:将字符串按指定方式分割,获取指定位置的数 复制代码 代码示例:
DELIMITER $$
DROP function IF EXISTS `func_splitString` $$ CREATE FUNCTION `func_splitString` ( 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_delimiter,f_order)),f_delimiter,1)); return result; END$$ SELECT func_splitString('1,2,3,4,5,6,7',',',1); 3,过程splitString 将字符串分割,并放到临时表tmp_split中 复制代码 代码示例:
DELIMITER $$
DROP PROCEDURE IF EXISTS `splitString` $$ CREATE PROCEDURE `splitString` (IN f_string varchar(1000),IN f_delimiter varchar(5)) BEGIN declare cnt int default 0; declare i int default 0; set cnt = func_split_TotalLength(f_string,f_delimiter); DROP TABLE IF EXISTS `tmp_split`; create temporary table `tmp_split` (`val_` varchar(128) not null) DEFAULT CHARSET=utf8; while i < cnt do set i = i + 1; insert into tmp_split(`val_`) values (func_split(f_string,f_delimiter,i)); end while; END$$ call splitString('a,s,d,f,g,h,j',','); SELECT * from tmp_split; 更多有关mysql split函数的用法,请参考:在mysql中实现split函数的几种方法 。
|