0

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

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

有人可以帮忙吗?

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

4

1 回答 1

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;
于 2013-10-18T00:28:01.547 回答