需求:获取由分隔符组成的字符串中第n个子字符串
实现:在MySQL中编写函数进行实现
以下为具体的函数代码:
DROP FUNCTION IF EXISTS f_get_strofindex;
CREATE FUNCTION f_get_strofindex(
str VARCHAR(1024),
split VARCHAR(10),
indexOf INT
)
RETURNS VARCHAR(1024)
BEGIN
/*******************************
*名称 --%NAME: 获取指定字符串
*功能描述 --%COMMENT: f_get_strofindex('i,hello,word',',',2) 获得的是 hello
*执行周期 --%PERIOD: 随时调用
*参数1 --%str: 需要分割的字符串
*参数1 --%split: 分隔符号
*参数1 --%indexOf: 取第几个元素
*备注 --%REMARK:
*******************************/
DECLARE location INT DEFAULT 0; --
DECLARE frontOf text; -- 第n-1个元素获取的字符串
DECLARE nextOf text ; -- 第n个元素获取的字符串
DECLARE splitLen INT ; -- 分隔符长度
DECLARE seed INT ; -- 分隔符个数
SET str=ltrim(rtrim(str)) ; -- 去掉字符串前后空格
SET frontOf = concat(substring_index(str,split,indexOf - 1 ),split) ;
SET nextOf=substring_index(str,split,indexOf) ;
SET splitLen=LENGTH(split);
SET seed=FLOOR((length(str)-length(replace(str,split,'')))/LENGTH(split)); -- 计算分隔符个数
IF indexOf = 1 THEN
RETURN substring_index(str,split,1);
ELSEIF indexOf = seed+1 THEN
RETURN substring_index(str,split,-1);
ELSEIF indexOf > seed+1 THEN
RETURN '';
ELSE
RETURN REPLACE(nextOf,frontOf,'');
END IF;
END ;