如何在mysql过程中使用SUBSTRING_INDEX函数
我已经创建了一个mysql过程。这里是代码如何在mysql过程中使用SUBSTRING_INDEX函数,mysql,stored-procedures,Mysql,Stored Procedures,我已经创建了一个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; r
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作为字符串,它包含以逗号分隔的school id。我想要分割这些ID并存储在不同的表中。但这条线d=子串_指数(b,,,c);显示错误。任何人都可以提供如何在程序中使用子字符串索引的解决方案吗 您当前的问题不是
子字符串索引
,而是缺少集
改变
d = SUBSTRING_INDEX(b, ',', c);
到
现在,这将解决语法错误,但您需要对代码进行一些更改才能使其正常工作 要从列表中获取第n个元素,需要应用
子字符串\u 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 ;
这里是演示这与@naveengoyal非常相似,它有帮助吗?你的问题需要更多的帮助吗?如果这是你要找的,请考虑答案。
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 ;