gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:12:45 25 4
gpt4 key购买 nike

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

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

有人可以帮忙吗?

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

最佳答案

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

关于MySQL游标用于逗号分隔字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19334028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com