MYQL存儲過程給銀行賬號每四位增加一個空格(請勿直接複製執行,可以參考 思路寫法)

--  修改銀行賬號存儲過程 (藍色的代表 某一張表 綠色的代表銀行賬號這個字段) 
DROP PROCEDURE IF EXISTS update_bankNumber;

DELIMITER;;
CREATE PROCEDURE update_bankNumber()
BEGIN
DECLARE id varchar(64);
DECLARE oldNuber varchar(64);
DECLARE newNuber varchar(64);


DECLARE i int;
DECLARE icount int;

DECLARE t int;
DECLARE tcount int;

DECLARE lin int;
DECLARE linNum int;

-- 定義 循環變量
SET i = 0;
SET t = 0;
SET lin = 0;
SET linNum = 0;
-- 獲取總數
SET icount = (SELECT COUNT(*) from nk_business.base_pay_accounts);
-- 獲取表的條數
WHILE i < icount DO
    SET id  = "";
    SET newNuber  = ",";
    -- 獲取每條數據的ID並賦值
    SET id = (SELECT f.ID FROM nk_business.base_pay_accounts f LIMIT i,1);
    SET  oldNuber = (SELECT f.CARD_CODE FROM nk_business.base_pay_accounts f WHERE f.ID = id);

    -- 去掉所有的空格
    -- UPDATE  base_pay_accounts bs SET bs.CARD_CODE = replace(oldNuber,' ','') where bs.ID = id;
    SET oldNuber = replace(oldNuber,' ','');
    IF oldNuber != ""  THEN
        SET @updateBankNubmerSql = CONCAT("update nk_business.base_pay_accounts set CARD_CODE ='",oldNuber,"' where ID='",id,"'");
        PREPARE updateBankNumber from @updateBankNubmerSql;
        EXECUTE updateBankNumber;
        deallocate prepare updateBankNumber;
    END IF;
    -- 獲取並設置這一條數據的銀行賬號的長度
    SET tcount = (SELECT length(f.CARD_CODE) FROM nk_business.base_pay_accounts f LIMIT i,1);
    WHILE t < tcount DO
        -- SET lin = t + 4;
        IF t + 4 <= tcount THEN 
            SET newNuber  =  CONCAT(newNuber,(substring(oldNuber,t+1,4)),"-");
        END IF;
        IF t + 4 > tcount THEN
            SET linNum = tcount - t;
            SET newNuber  =  CONCAT(newNuber,(substring(oldNuber,t+1,linNum)),"-");
        END IF;
        SET t = t + 4;
        -- 結束循環
    END WHILE;
    SET newNuber =  replace(newNuber,'-',' ');
    SET newNuber =  replace(newNuber,',','');
    SET newNuber =  substring(newNuber,1,length(newNuber)-1);
    IF newNuber != ""  THEN
        SET @updateBankNubmerSql = CONCAT("update nk_business.base_pay_accounts set CARD_CODE ='",newNuber,"' where ID='",id,"'");
        PREPARE updateBankNumber from @updateBankNubmerSql;
        EXECUTE updateBankNumber;
        deallocate prepare updateBankNumber;
    END IF;
    SET t = 0;
    -- 執行sql語句
    SET i = i + 1;
-- 結束循環
END WHILE;
COMMIT;
END
;;
DELIMITER ;

CALL update_bankNumber();
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章