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所在位置。
原文:http://www.cnblogs.com/devin818/p/5210739.html