字符匹配

create or replace procedure gx_add_time_apply (
  resultStr out varchar,
 v_apply in CHAR
 ) is
v_sql char(2000);
v_cnt number;
c_m char;
v_n number;
v_m number;
v_r varchar(200);
v_time varchar(200);
v_u varchar(200);
v_k number;
c number;
v_message varchar(200);
v_date char(30);
v_apply_no number;
Begin
--初始化消息
v_message:='';
 --请自行编辑存储过程函数体
 ---选出空间表信息v_apply的长度
 v_apply_no:=gx_apply_no.nextval;
select length(trim(v_apply)) -
      length(replace(trim(v_apply), ';', ''))
          into v_n from dual;
	-- for循环选出每个;下的字符串,并截取出时间段
   FOR v_m IN 1 .. (v_n + 1) LOOP
    v_r := regexp_substr(v_apply, '[^;]+', 1, v_m);
    v_time :=substr(v_r,1,11);
     --在字符串v_r上循环,选出为1的位置
     for v_k in 2..8 loop
	 v_u := regexp_substr(v_r,'[^&]+',1,v_k);
	 if v_u=1 then
       --时间段空间位置记录
        v_message:=v_message||v_time||v_m||(v_k-1);
       end if;
	 end loop;

    END LOOP;
    f v_message!='' or v_message is not null then
     ResultStr := v_message;
     return;
    end if;
    ResultStr := 'success:提交成功';
End;

 上面是给定字符串v_apply=00:00-05:00&0&1&3&0&1&0&1;00:05-10:00&0&0&0&0&1&0&1,此类格式字符串确定1位置的程序。使用了两次循环先选取出字符串00:00-05:00&0&1&3&0&1&0&1,截取时间段00:00-05:00,然后在找出1的位置。循环,知道找出所有1所在位置。

posted @ 2016-02-23 17:38  何以萧萧兮  阅读(196)  评论(0编辑  收藏  举报