IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]MySQL 5.7.16 字符串拆分 -> 单列变多行记录

    mchdba发表于 2016-12-26 22:12:08
    love 0
    DELIMITER $$
    USE `test`$$
    DROP PROCEDURE IF EXISTS `proc_cur_split_str`$$
    USE `test`$$
    CREATE PROCEDURE test.proc_cur_split_str()
    BEGIN
        DECLARE v_c1 VARCHAR(20);
        DECLARE v_c2 VARCHAR(60);
        DECLARE _done INT DEFAULT 0; 
        
        DECLARE cur_strs CURSOR FOR SELECT 'man' c1,'123,234,567,789' c2 UNION ALL SELECT 'guo','-12,-87,-09,132' UNION ALL SELECT 'fang','1024,2387,1209,1032' ;
        DECLARE CONTINUE HANDLER FOR NOT FOUND BEGIN SET _done=1; END;
         DROP TABLE IF EXISTS test.ZZ_2;   
         CREATE TABLE test.ZZ_2(C1 VARCHAR(20),CN VARCHAR(60));
        OPEN cur_strs;
            FETCH cur_strs INTO v_c1, v_c2;
            WHILE _done != 1  DO 
    			DROP TABLE IF EXISTS test.ZZ_1;
    			CREATE TABLE ZZ_1(CN VARCHAR(60)); 
    			SET @b=v_c2;
    			 SET @a = CONCAT(CONCAT("insert into test.ZZ_1 values('",REPLACE(@b,',',"'),('")),"')");
    			-- SELECT @a;
    			 PREPARE stmt1 FROM @a;  
    			EXECUTE stmt1;  
    			-- SELECT v_c1,t.* FROM test.ZZ_1 t; #,blog原地址:http://blog.csdn.net/mchdba/article/details/53889803,作者mchdba,谢绝转载
    			INSERT INTO ZZ_2 SELECT v_c1,t.* FROM test.ZZ_1 t;
    			
    			COMMIT;   
    			-- SELECT * FROM test.ZZ_2;
                FETCH cur_strs INTO v_c1, v_c2;
    	END WHILE;
        CLOSE cur_strs;      
        SELECT * FROM test.ZZ_2;  
    END;      
    



沪ICP备19023445号-2号
友情链接