【问题标题】:splitting text data in mysql在mysql中拆分文本数据
【发布时间】:2015-09-29 06:06:14
【问题描述】:

我想像这样拆分我的行:

示例:

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;

【问题讨论】:

    标签: mysql split delimiter


    【解决方案1】:

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

    drop procedure if exists pecah_lokasi_sp;
    

    创建过程pecah_lokasi_sp() 开始
    声明 ii INT; 声明 ki varchar(255); DECLARE ulang int DEFAULT 1; DECLARE hasil varchar(255) DEFAULT ''; 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;
    

    结束;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多