2013-03-08 35 views
-1

在我的mysql表中,我有兩個逗號分隔,並沒有逗號分隔列中的值。我需要獲取列中所有行的值,並且如果在特定行中有逗號分隔的值,則值應該返回爲新行。例如,我有,Mysql查詢打印在由逗號分隔的新行中的值

a 
d,e 
f 
s,w,h 

逗號的數量是不固定的。我試過以下查詢SELECT replace(description,',',CHAR(13)) FROM errorcodes,它工作正常。我現在需要的僅僅是當它以逗號分割時,我需要將值放入新的一行。現在它分裂,但在一個新的行中給予價值,但不是新行。請幫助如何做。

注: 的預期結果是 -

a 
d 
e 
f 
s 
w 
h 

都在一個新行。

+0

我知道你期望的輸出例子嗎? – 2013-03-08 06:45:21

+0

@Malai:我已經更新了我的問題 – user850234 2013-03-08 06:54:21

+0

您好。我在這裏發表評論是因爲你刪除了你正在評論中的沉重低估問題。你有600多個代表,所以你會意識到我們不鼓勵堆棧溢出的「轉儲和運行」問題。如果您需要一個正則表達式,請提供您在新問題中嘗試過的代碼,以及您遇到的具體問題。謝謝':)' – halfer 2013-04-04 12:59:07

回答

0

我創建了自定義函數,它解決了我的目的。任何人都需要這個可以在相應參考下面的代碼,並更改表名和列名:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS explode_table $$ 
CREATE PROCEDURE explode_table(bound VARCHAR(255)) 

    BEGIN 

    DECLARE value VARCHAR(255); 
    DECLARE occurance INT DEFAULT 0; 
    DECLARE i INT DEFAULT 0; 
    DECLARE splitted_value VARCHAR(255); 
    DECLARE done INT DEFAULT 0; 
    DECLARE cur1 CURSOR FOR SELECT errorcodes.description 
             FROM errorcodes 
             WHERE errorcodes.description != ''; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

    DROP TEMPORARY TABLE IF EXISTS table2; 
    CREATE TEMPORARY TABLE table2(
    `value` VARCHAR(255) NOT NULL 
    ) ENGINE=Memory; 

    OPEN cur1; 
     read_loop: LOOP 
     FETCH cur1 INTO value; 
     IF done THEN 
      LEAVE read_loop; 
     END IF; 

     SET occurance = (SELECT LENGTH(value) 
           - LENGTH(REPLACE(value, bound, '')) 
           +1); 
     SET i=1; 
     WHILE i <= occurance DO 
      SET splitted_value = 
      (SELECT REPLACE(SUBSTRING(SUBSTRING_INDEX(value, bound, i), 
      LENGTH(SUBSTRING_INDEX(value, bound, i - 1)) + 1), ',', '')); 

      INSERT INTO table2 VALUES (splitted_value); 
      SET i = i + 1; 

     END WHILE; 
     END LOOP; 

     SELECT * FROM table2; 
    CLOSE cur1; 
    END; $$ 

現在只是簡單地調用CALL explode_table(",")給出所需的格式輸出。