gpt4 book ai didi

mysql - 如何在 mysql 过程中使用 SUBSTRING_INDEX 函数

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

我已经创建了一个 mysql 程序。这是它的代码

BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE a , b, d TEXT;
DECLARE c INT Default 0;
DECLARE cur1 CURSOR FOR SELECT id, school_id FROM my_list;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO a, b;
IF done THEN
LEAVE read_loop;
END IF;
insertSchool: LOOP
SET c = c + 1;
d = SUBSTRING_INDEX(b, ',', c);
IF d = "" THEN
LEAVE insertSchool;
END IF;
INSERT INTO my_school (my_id, school_id) VALUES (a,b);
END LOOP insertSchool;
END LOOP;
CLOSE cur1;
END

在此 cur1 中,school_id 为字符串,它包含以逗号分隔的学校 ID。我想拆分这些 ID 并存储在不同的表中。但是这一行 d = SUBSTRING_INDEX(b, ',', c);显示错误。谁能提供如何在程序中使用 SUBSTRING_INDEX 的解决方案?

最佳答案

您当前的问题不是 SUBSTRING_INDEX 而是缺少 SET

改变

d = SUBSTRING_INDEX(b, ',', c);

SET d = SUBSTRING_INDEX(b, ',', c);
^^^


现在这将解决语法错误,但您需要对代码进行大量更改才能使其正常工作。

要从列表中获取第 n 个元素,您需要应用 SUBSTRING_INDEX() 两次

SUBSTRING_INDEX(SUBSTRING_INDEX(list, ',', n), ',', -1)

话虽如此,您的 SP 可能看起来像

DELIMITER $$
CREATE PROCEDURE my_sp()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE a, b, d VARCHAR(12);
DECLARE c, m INT DEFAULT 0;

DECLARE cur1 CURSOR FOR SELECT id, school_id FROM my_list;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur1;

read_loop: LOOP
FETCH cur1 INTO a, b;
IF done THEN LEAVE read_loop; END IF;
SET c = 0;
SET m = CHAR_LENGTH(b) - CHAR_LENGTH(REPLACE(b, ',', ''));

insertSchool: LOOP
SET c = c + 1;
IF c > m + 1 THEN LEAVE insertSchool; END IF;
SET d = SUBSTRING_INDEX(SUBSTRING_INDEX(b, ',', c), ',', -1);
INSERT INTO my_school (my_id, school_id) VALUES (a, d);
END LOOP insertSchool;

END LOOP;
CLOSE cur1;
END$$
DELIMITER ;

这是 SQLFiddle 演示

关于mysql - 如何在 mysql 过程中使用 SUBSTRING_INDEX 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18140333/

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