DELIMITER $$ ;H;c Sn5uL
+M^+qt;]V
DROP PROCEDURE IF EXISTS `sp_split_trig`$$ 8M&q
CREATE -0o1iU7
U&}v1wdZ3
PROCEDURE `sp_split_trig`(IN sp_char VARCHAR(5000)) 1x8zub B
-mur`tC
BEGIN /3`(Ki{
Q
BhcTPQsW
DECLARE sp_char_length INT DEFAULT 0; /*定义分隔后字符串数量*/ b|KlWt'
DECLARE sp_index INT DEFAULT 0; /*定义指针*/ 8,DY0PGP
DECLARE sp_delimiter_one VARCHAR(5) DEFAULT ":"; /*定义分隔符*/ }Jr!aM'
DECLARE sp_delimiter_two VARCHAR(5) DEFAULT "|"; (+w>hCI
DECLARE sp_char_tmp VARCHAR(5000); /*定义字符串临时变量*/ a\@k5?
6hX[5?}
SET sp_char_length = 1+(LENGTH(sp_char) - LENGTH(REPLACE(sp_char,sp_delimiter_one,''))); /*获取分隔后字符串数量*/ :*6#(MX
.WV5Gf)
/*创建分隔结果表*/ N" =$S|Gs
DROP TABLE IF EXISTS tmp_char; 5H!6#pqM
CREATE TEMPORARY TABLE tmp_char (act VARCHAR(1000) NOT NULL, gut VARCHAR(5000) NOT NULL); alV{| Vf[6
dtDT^~
WHILE sp_index < sp_char_length M?QK4Zxb6U
DO |K,[[D<R
SET sp_index = sp_index + 1; IB%Hv]
/*获取分隔后字符串,保存到临时表*/ pHKGK7 S-
SET sp_char_tmp = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(sp_char,sp_delimiter_one,sp_index)),sp_delimiter_one,1)); *<"#1H/q
INSERT INTO tmp_char (act, gut) VALUES (SUBSTRING_INDEX(sp_char_tmp,sp_delimiter_two,1), SUBSTRING_INDEX(sp_char_tmp,sp_delimiter_two,-1)); T_NN.Ol
END WHILE; p1`")$
i~sW_f+
SELECT * FROM tmp_char; /*测试分隔结果*/ :)g}x&A^$
! a!^'2
END$$ Q@aDa 8Z
;cD&qheDV
DELIMITER ; `\Ye:$q
z5q(
对一个字符串进行了二次分隔 ,第二次分隔认为只能分隔一次。 第一次分隔符为“:”, 第二次分隔符为“|”。