
BEGIN
#前提:指定字符串長度為8字符定長
#邏輯:循環8次,比對2個字符串相同索引位置下的數值大小,並取結果最大值。
#示例:merge1(輸入參數source1,輸入參數source2,輸出結果result)
#注意:輸入參數必須是8位字符串
set @cindex=1;
set result='';
WHILE @cindex<9 DO
set @temp1=SUBSTR(source1,@cindex,1)+0;
set @temp2=SUBSTRING(source2,@cindex,1)+0;
IF @temp1>@temp2 THEN
set result=CONCAT(result,@temp1);
set @cindex=@cindex+1;
ELSEIF @temp1=@temp2 THEN
set result=CONCAT(result,@temp1);
set @cindex=@cindex+1;
ELSEIF @temp1<@temp2 THEN
set result=CONCAT(result,@temp2);
set @cindex=@cindex+1;
END IF;
END WHILE;
END
#前提:指定字符串長度為8字符定長
#邏輯:循環8次,比對2個字符串相同索引位置下的數值大小,並取結果最大值。
#示例:merge1(輸入參數source1,輸入參數source2,輸出結果result)
#注意:輸入參數必須是8位字符串
set @cindex=1;
set result='';
WHILE @cindex<9 DO
set @temp1=SUBSTR(source1,@cindex,1)+0;
set @temp2=SUBSTRING(source2,@cindex,1)+0;
IF @temp1>@temp2 THEN
set result=CONCAT(result,@temp1);
set @cindex=@cindex+1;
ELSEIF @temp1=@temp2 THEN
set result=CONCAT(result,@temp1);
set @cindex=@cindex+1;
ELSEIF @temp1<@temp2 THEN
set result=CONCAT(result,@temp2);
set @cindex=@cindex+1;
END IF;
END WHILE;
END
這個過程是用來 合並 2個 8為varchar類型字符串的
參數 見截圖

BEGIN
DECLARE hasDone INT DEFAULT FALSE;
DECLARE missionIDValue VARCHAR(8);
DECLARE missionIDdata VARCHAR(8);
DECLARE groupNameCur CURSOR FOR SELECT missionID from a where a.groupName=groupNames;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET hasDone = TRUE;
set missionIDValue='00000000';
set missionIDdata='00000000';
OPEN groupNameCur;
read_loop: LOOP
FETCH groupNameCur INTO missionIDdata;
IF hasDone THEN
LEAVE read_loop;
END IF;
call merge1(missionIDValue,missionIDdata,missionIDValue);
SELECT missionIDdata,missionIDValue;
END LOOP;
CLOSE groupNameCur;
SELECT groupNames;
UPDATE a set other=missionIDValue where a.groupName=groupNames;
END
DECLARE hasDone INT DEFAULT FALSE;
DECLARE missionIDValue VARCHAR(8);
DECLARE missionIDdata VARCHAR(8);
DECLARE groupNameCur CURSOR FOR SELECT missionID from a where a.groupName=groupNames;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET hasDone = TRUE;
set missionIDValue='00000000';
set missionIDdata='00000000';
OPEN groupNameCur;
read_loop: LOOP
FETCH groupNameCur INTO missionIDdata;
IF hasDone THEN
LEAVE read_loop;
END IF;
call merge1(missionIDValue,missionIDdata,missionIDValue);
SELECT missionIDdata,missionIDValue;
END LOOP;
CLOSE groupNameCur;
SELECT groupNames;
UPDATE a set other=missionIDValue where a.groupName=groupNames;
END
這個函數是用來 把分組數據進行逐條合並的。它需要一個 分組名稱
然后根據分組名稱去循環調用 merge1 函數,並把最終結果更新到同組數據的 other 列中

BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE groupNameValue VARCHAR(8);
DECLARE groupNameCur CURSOR FOR SELECT DISTINCT groupName from a;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN groupNameCur;
read_loop: LOOP
FETCH groupNameCur INTO groupNameValue;
IF done THEN
LEAVE read_loop;
END IF;
CALL autoMergeGroup(groupNameValue);
END LOOP;
CLOSE groupNameCur;
END
這個是自動化合並的入口函數。它負責對數據進行分組,並循環調用 autoMergeGroup 過程,就是上面的存儲過程。
程序在執行時,只需要調用這個存儲過程就可以了,就能做到:先把數據分組,再循環每組執行。在每組執行中,循環查詢每條數據,把當前條和參考值'00000000'最合並操作

這是a表執行結果截圖
varchar類型,必須提供長度,否則 就無法檢驗到底問題出在那里