我是MySQL的新手,所以需要一些帮助。
我有一个表,其中有一个包含逗号分隔字符串的varchar列,如下所示:
cat_1,cat_2,cat_3,cat_4,cat_5
cat_6,cat_7,cat_8,cat_5
cat_1,cat_2,cat_5
cat_1,cat_2,cat_9,cat_4,cat_5
cat_7,cat_5
我想创建一个游标,我可以用它来遍历这样一个字符串中的每个cat_
值。
我必须将每个子字符串与设定值进行比较,然后根据它做一些逻辑。
在算法形式中,这就是我需要的:
foreach row
foreach substring s in big_string
if s='cat_1'
--do logic
else if s='cat_2'
--do logic
else if s='cat_3'
--do logic
--and so on
end
end
end
我知道如何使用普通的选择光标创建外部循环。我只是不知道如何创建内部循环,它循环遍历每个逗号分隔的子字符串。
有人可以帮忙吗?
编辑:我需要这个用于存储过程。
答案 0 :(得分:0)
首先,一个获取分隔字符串的第n个部分的函数:
DELIMITER $$
DROP FUNCTION IF EXISTS `string_splitter` $$
CREATE FUNCTION `string_splitter`(
str text,
delim varchar(255),
pos int) RETURNS text CHARSET utf8
BEGIN
return replace(substring_index(str, delim, pos), concat(substring_index(str, delim, pos - 1), delim), '');
END $$
DELIMITER ;
现在是代码,它使用该函数迭代分隔字符串的各个部分:
set @str = 'cat_1,cat_2,cat_3,cat_4,cat_5'; -- replace this with the value from the cursor
set @delim = ',';
set @numPieces = 1 + ((length(@str) - length(replace(@str, @delim, ''))) / length(@delim));
set @i = 1;
while @i <= @numPieces do
set @piece = string_splitter(@str, @delim, @i);
-- do something here with @piece
set @i = @i + 1;
end while;