MySQL儲存過程-->長字串扯分

us_yunleiwang發表於2013-12-06

DELIMITER $$  -- 分隔符
USE`test`$$ -- 
DROPPROCEDURE IF EXISTS `pro_split`$$  -- 如果已經存在則刪除proc

CREATE PROCEDURE `test`.`pro_split` (varchar rids)
BEGIN
         DECLAREpo INT DEFAULT 0;  -- 定義一個位置點
         DECLARErid VARCHAR(20) DEFAULT "";   -- 定義一個rid變數
         DECLARErid_tmp VARCHAR(20) DEFAULT "";
         SET po= LOCATE(",",rids);  -- 找到第一個,的位置點
         SET rid=LEFT(po-1,rids);   -- 擷取出第一個rid
         SETrid_tmp=SUBSTR(rids,po+1);   -- 設定剩下還沒有處理的rids長字串


           WHILEpo >0 DO    -- 開始迴圈處理rids長字串
                  INSERTINTO b_tmp SELECT pid,rid;  --把擷取出來的rid放入臨時表中
                  SET po =LOCATE(",",rid_tmp);  -- 獲取未處理中的長字串的,的第一個位置點
                  SET rid=LEFT(po-1,rid_tmp);   --取出每一個迴圈中擷取出來的rid
                  SETrid_tmp=SUBSTR(rid_tmp,po+1);   -- 重新設定未處理的長字串。
         ENDWHILE  ;
         
         
   END$$




DELIMITER;




PS:這個是預設的字串扯分規則是“,”,如果想變成靈活一些的,可以設定一個in 引數,在呼叫proc的時候代入即可。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23490154/viewspace-1062499/,如需轉載,請註明出處,否則將追究法律責任。

相關文章