第一種:多次使用substring_index()的方法
- DELIMITER $$
- DROP PROCEDURE IF EXISTS `array`$$
- CREATE PROCEDURE `array`()
- BEGIN
- SET @array_content="www mysql com hcymysql blog 51cto com";
- SET @i=1;
- SET @count=CHAR_LENGTH(@array_content)-CHAR_LENGTH(REPLACE(@array_content,' ','')) + 1;
- -- 得出數組成員總數
- CREATE TABLE test.tmp(field1 VARCHAR(100));
- WHILE @i <= @count
- DO
- INSERT INTO test.tmp VALUES
- (SUBSTRING_INDEX(SUBSTRING_INDEX(@array_content,' ',@i),' ',-1));
- -- 依次插入每個成員
- SET @i=@i+1;
- END WHILE;
- END$$
- DELIMITER ;
第二種:使用遍歷每個字符的方法
drop procedure if exists Pro_DeleteLog; -- 存在即刪除
create procedure Pro_DeleteLog( Qualification varchar(100)) -- 定義參數
begin
declare i int ;
declare Start1 int;
declare Length int ;
declare TotalLenght int ;
declare filed varchar(100) ;
declare sqlStr varchar(2000) ;
declare stmtNovelSearch varchar(2000) ;
set i=1;
set Start1=1;
set Length=0;
set TotalLenght=length(Qualification); -- 計算輸入參數長度
select TotalLenght;
while i <=TotalLenght do -- i=1 開始
-- select SUBSTRING(Qualification,i,1);
if(SUBSTRING(Qualification,i,1)=',') -- 注意 mysql 的substring函數截取字符串是從1開始的,而不是0 與java JavaScript不同。
-- 從第i位開始截取一個字符,看是否等於,
then
set filed=SUBSTRING(Qualification,Start1,Length);-- 從start1開始截取length長度的字符
select filed;
set @sqlStr = CONCAT('insert into end_results(accessid,filedName,errinfo)select * from (select w1.accessid ,\'',filed ,'\' as filedName,',filed,' from wdd_audit w1 ,wdd_dbaccessinfo w2 where w1.accessid=w2.accessid )a where not exists(select e.',filed ,' from exp_results e where e.',filed,'=a.',filed,' or(e.',filed,' is null and a.',filed,' is null) );');
-- 拼裝sql語句
select @sqlStr;
PREPARE stmtNovelSearch FROM @sqlStr; -- prepare 必須采用這種傳參方式
execute stmtNovelSearch;
deallocate prepare stmtNovelSearch;
set Start1=i+1;
set Length=0;
else
set Length=Length+1; -- 如果不是, 則截取的長度加1
end if;
set i=i+1;
end while;
end
-- 調用存儲過程 字段名以,分隔 注意最后 , 結尾
call Pro_DeleteLog('payload,backresult,dataset,effectrow,clientuser,loginuser,clientprg,')
個人推薦第一種;
