在mysql中拆分文本数据

时间:2015-09-29 06:06:15

标签: mysql split delimiter

我想把我的行分开:

示例:

id  data
1   23#4#
2   2#4#5#

就像这样

id  data
1   23
1   4
2   2
2   4
2   5

我已经在堆栈溢出中寻找这个问题,但解决方案并不令我满意。请帮帮我。

我尝试在mysql中创建一个存储过程,代码没问题,但是结果不行。

drop procedure if exists pecah_lokasi_sp;
create procedure pecah_lokasi_sp()
begin   
    DECLARE ii INT;
    DECLARE ki varchar(255);
    DECLARE ulang int DEFAULT 1;
    DECLARE hasil varchar(255) DEFAULT '';
    DECLARE selesai INT DEFAULT FALSE;

    DECLARE kursor CURSOR FOR 
        SELECT id_iklan, lokasi_kerja_utama
        FROM iklan_lowongan_tb
        WHERE status = 'Aktif'; 

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET selesai = TRUE;

    DELETE FROM temp_lok_tb;

    OPEN kursor;

    read_loop: LOOP
        FETCH kursor INTO ii, ki;   

        IF selesai  THEN
          LEAVE read_loop;
        END IF;

        WHILE (ulang < LENGTH(ki)) DO
            IF SUBSTRING(ki, ulang, 1) <> '#' THEN
                SET hasil = CONCAT(hasil, SUBSTRING(ki, ulang, 1));             
            ELSE    
                INSERT INTO temp_lok_tb (id_iklan, id_kota) VALUES(ii, hasil);
                SET hasil = '';             
            END IF;
            SET ulang = ulang+1;
        END WHILE;
        SET ulang = 1;
    END LOOP read_loop; 

    CLOSE kursor;
    select * from temp_lok_tb;
end;

1 个答案:

答案 0 :(得分:0)

我想我可以自己解决问题。 这是我的修订版代码,结果是真的。

drop procedure if exists pecah_lokasi_sp;

创建程序pecah_lokasi_sp() 开始
    DECLARE ii INT;     DECLARE ki varchar(255);     DECLARE ulang int DEFAULT 1;     DECLARE hasil varchar(255)DEFAULT&#39;&#39;     DECLARE selesai INT DEFAULT FALSE;     DECLARE jmlkarakter int;

DECLARE kursor CURSOR FOR 
    SELECT id_iklan, lokasi_kerja_utama
    FROM iklan_lowongan_tb
    WHERE status = 'Aktif'; 

DECLARE CONTINUE HANDLER FOR NOT FOUND SET selesai = TRUE;

DELETE FROM temp_lok_tb;

OPEN kursor;

read_loop: LOOP
    FETCH kursor INTO ii, ki;   

    IF selesai  THEN
      LEAVE read_loop;
    END IF;

    SET jmlkarakter = LENGTH(ki) - LENGTH(REPLACE(ki, '#', '')) ;

    WHILE (ulang <= jmlkarakter) DO

        IF ulang = 1 THEN
            INSERT INTO temp_lok_tb(id_iklan, id_kota) VALUES(ii, SUBSTRING_INDEX(ki,'#',1));
        ELSE
            INSERT INTO temp_lok_tb(id_iklan, id_kota) VALUES(ii, SUBSTRING_INDEX(SUBSTRING_INDEX(ki,'#', ulang),'#',-1));
        END IF;

        SET ulang = ulang+1;
    END WHILE;

    SET ulang = 1;
END LOOP read_loop; 

CLOSE kursor;
select * from temp_lok_tb;

端;