【问题标题】:MySQL cursor for comma delimited string?逗号分隔字符串的MySQL游标?
【发布时间】:2013-10-12 12:10:53
【问题描述】:

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

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

有人可以帮忙吗?

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

【问题讨论】:

  • 你研究过:FIND_IN_SET()吗?
  • 你想应用什么样的逻辑?请详细说明。您可能不需要游标来拆分或应用您的逻辑。

标签: mysql loops cursor


【解决方案1】:

首先,获取第 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2011-10-17
    相关资源
    最近更新 更多