MySQL存儲過程是一種服務端程序,可以接收輸入參數,執行特定的計算和邏輯操作,然后返回輸出參數。在實際開發中,經常需要將輸入參數進行拆分和處理,這時可以使用循環來逐個處理拆分后的參數。
-- 定義存儲過程,輸入參數為一個字符串 CREATE PROCEDURE sp_split_string(IN str VARCHAR(255)) BEGIN DECLARE pos INT; DECLARE sub_str VARCHAR(255); DECLARE done INT DEFAULT 0; DECLARE delimiter CHAR(1) DEFAULT ','; -- 定義游標,用于循環 DECLARE cursor_data CURSOR FOR SELECT REPLACE(str, ' ', '') as str; -- 定義異常處理程序,在循環中出現異常時進行處理 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; -- 打開游標 OPEN cursor_data; -- 循環讀取游標數據,直到數據全部處理完畢 loop_data: LOOP -- 讀取游標數據 FETCH cursor_data INTO sub_str; -- 檢查是否已經讀取完所有數據 IF done = 1 THEN LEAVE loop_data; END IF; -- 將字符串拆分成數組 WHILE LENGTH(sub_str) >0 DO SET pos = INSTR(sub_str, delimiter); IF pos = 0 THEN SET pos = LENGTH(sub_str) + 1; END IF; -- 取出當前位置之前的子串 SET sub_str = TRIM(SUBSTR(sub_str, 1, pos - 1)); -- 輸出結果 SELECT sub_str; -- 將子串從原字符串中刪除 SET sub_str = TRIM(SUBSTR(sub_str, pos + 1)); END WHILE; END LOOP; -- 關閉游標 CLOSE cursor_data; END
在上面的存儲過程中,將輸入字符串按照逗號進行拆分,并逐個輸出拆分后的結果。循環部分的核心是對字符串的拆分,首先通過INSTR函數獲取逗號的位置,然后截取字符串并輸出,最后將已輸出的子串從原字符串中刪除。
上一篇mysql 時間轉日期