MySQL带固定分隔符字符串中元素的遍历,用于解决MySQL不支持数组的问题
MySQL不支持数组遍历,我们可以采用带有固定分隔符(一般采用西文的逗号)的字符串存储要遍历的数据。本文编制了2个MySQL函数:GetNum函数可以计算出字符串中的元素个数;GetElement函数可以根据输入参数取出指定的元素。代码如下:
CREATE FUNCTION GetNum
(
str varchar(1024),
split varchar(10)
) RETURNS int
begin
declare i int;
declare s varchar(1024);
set i=1;
my_loop:loop
set s=substring_index(str,split,i);
if s=str
then leave my_loop;
end if;
set i=i+1;
end loop my_loop;
return i;
end
CREATE FUNCTION GetElement
(
str varchar(1024),
split varchar(10),
i int
) RETURNS varchar(1024)
BEGIN
declare output varchar(1024);
declare s1 varchar(1024);
declare s2 varchar(1024);
set output=substring_index(str,split,i);
if i>1 then
set s1=output;
set s2=substring_index(str,split,i-1);
set output=substring(s1,length(s2)+2,length(s1)-length(s2));
end if;
RETURN output;
END
函数应用举例如下:
select GetNum(‘1,2,3,4,5,6,7,8,9’,‘,’) 结果为9
select GetElement(‘1,2,3,4,5,6,7,8,9’,‘,’,5) 结果为5
下面用一个存储过程实现字符串元素的遍历:
CREATE PROCEDURE myprocedure
()
BEGIN
declare str varchar(1024);
declare s varchar(1024);
declare i int;
declare m int;
set str=‘1,2,3,4,5,6,7,8,9’;
set m=GetNum(str,‘,’);
set i=1;
while (i<=m) do
set s=GetElement(str,‘,’,i);
insert into t values(s);
set i=i+1;
end while;
select * from t;
END
注意:需要提前建一个只有一个字符型字段的表t用于存储字符串元素遍历的结果,建表语句略。