用于逗号分隔字符串的MySQL游标?

时间:2013-10-12 12:10:53

标签: mysql loops cursor

我是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

我知道如何使用普通的选择光标创建外部循环。我只是不知道如何创建内部循环,它循环遍历每个逗号分隔的子字符串。

有人可以帮忙吗?

编辑:我需要这个用于存储过程。

1 个答案:

答案 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;