- create or replace function FUN_INSTR_CNT(in_str varchar2,
- in_instr varchar2) return number as
- i number := 1;
- v_lsx varchar2(4000) default '';
- vv_lsx varchar2(4000) default '';
- v_len number := 1;
- begin
- if length(in_instr) >= 1 then
- v_len := length(in_str);
- while i <= v_len loop
- v_lsx := v_lsx || in_instr;
- i := i + 1;
- end loop;
- i := 1;
- while i <= v_len loop
- vv_lsx := substr(v_lsx, 1, v_len - i + 1);
- if instr(in_str, vv_lsx) >= 1 and length(vv_lsx) >= length(in_instr) then
- return length(vv_lsx) / length(in_instr);
- end if;
- i := i + 1;
- end loop;
- end if;
- return 0;
- end;
- /
执行结果
- SQL> select FUN_INSTR_CNT('aafffbbfffffd','f'),FUN_INSTR_CNT('0000','1'),FUN_INSTR_CNT('101010','11'),FUN_INSTR_CNT('101010','1'),FUN_INSTR_CNT('101010','1'),FUN_INSTR_CNT('10101011','1') from dual;
- ;
- FUN_INSTR_CNT('AAFFFBBFFFFFD', FUN_INSTR_CNT('0000','1') FUN_INSTR_CNT('101010','11') FUN_INSTR_CNT('101010','1') FUN_INSTR_CNT('101010','1') FUN_INSTR_CNT('10101011','1')
- ------------------------------ ------------------------- ---------------------------- --------------------------- --------------------------- -----------------------------
- 5 0 0 1 1 2
- SQL>
- SQL>