博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql存储过程中遍历数组字符串的两种方式
阅读量:6173 次
发布时间:2019-06-21

本文共 1955 字,大约阅读时间需要 6 分钟。

第一种:多次使用substring_index()的方法

  1. DELIMITER $$ 
  2. DROP PROCEDURE IF EXISTS `array`$$ 
  3. CREATE  PROCEDURE `array`() 
  4. BEGIN 
  5. SET @array_content="www mysql com hcymysql blog 51cto com"; 
  6. SET @i=1; 
  7. SET @count=CHAR_LENGTH(@array_content)-CHAR_LENGTH(REPLACE(@array_content,' ','')) + 1; 
  8. -- 得出数组成员总数 
  9. CREATE TABLE test.tmp(field1 VARCHAR(100)); 
  10. WHILE @i <= @count 
  11. DO 
  12. INSERT INTO test.tmp VALUES  
  13. (SUBSTRING_INDEX(SUBSTRING_INDEX(@array_content,' ',@i),' ',-1));      
  14. -- 依次插入每个成员  
  15. SET @i=@i+1; 
  16. END WHILE; 
  17. END$$ 
  18. 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,')
 
个人推荐第一种;

转载地址:http://almba.baihongyu.com/

你可能感兴趣的文章
Nginx + CGI/FastCGI + C/Cpp
查看>>
学习笔记------jsp页面与jsp标记
查看>>
DS博客作业02--线性表
查看>>
第三届ACM山东省赛I题_Chess_STL
查看>>
jQuery each和js forEach用法比较
查看>>
前端笔记-作用域链的一些理解加记录(JS高级程序设计读书笔记1)
查看>>
改造你的网站,变身 PWA
查看>>
Leetcode 142. Linked List Cycle IIJAVA语言
查看>>
网络基础5
查看>>
Exchange Supported operating system platforms
查看>>
unity3鼠标点击移动
查看>>
Linux 安装中文包
查看>>
谷物大脑
查看>>
访问控制-禁止php解析、user_agent,PHP相关配置
查看>>
AgileEAS.NET之系统架构
查看>>
python3.5里的正则表达式
查看>>
Exchange server 2013 SP1 客户端会议室邮箱自动回复延迟
查看>>
nginx反向代理缓存服务器构建
查看>>
RHEL6 搭建LVS/DR 负载均衡集群 案例
查看>>
以太坊·Rinkeby 测试网络
查看>>