统计字符串出现的次数
2011-03-15 14:35
288 查看
昨天学习instr函数(http://blog.csdn.net/BOBO12082119/archive/2011/03/14/6248848.aspx
),当我写子串在母串中出现的位置的查询时,有个想法:能不能找出子串在母串中出现的次数,或者oracle有没有这样的统计函数呢?由于才学oracle没多久,所以很多知识还未触及,所以想了个最笨的方法,如下:
SQL>
select sum(case when instr('chen_libo_bobo12082119','bo')>0
then 1
else 0
end) from dual;
SUM(CASEWHENINSTR('CHEN_LIBO_B
------------------------------
1
如果正确的统计的话,应该是3次。很明显我写的语句不能正确的统计出来。
找了找,有下面两种方法:
方法1:自建一个函数
create
or replace function InStrTimes(main_str in varchar2,sub_str
in varchar2) return number
as
v_main_str varchar2(4000);
v_ms_len number;
v_ss_len number;
v_Pos number:=
0;
v_PosR number:=
0;
v_Count number:=
0;
v_Ret number:=0;
begin
v_main_str := main_str;
v_ss_len := length(sub_str);
v_ms_len := length(main_str);
begin
while v_ms_len >= v_ss_len
loop
v_Pos := instr(v_main_str,sub_str) ;
if v_Pos =0
then
exit;
else
v_Ret:=v_Ret+1;
v_main_str := substr(v_main_str,v_Pos+v_ss_len);
v_ms_len := length(v_main_str);
v_Count := v_Count +1;
v_PosR :=v_PosR+v_Pos-1;
end if;
end loop;
exception
when others then
raise;
end;
return v_Ret;
end;
SQL>
select InStrTimes('chen_linbo_bobo12082119','bo')
from dual;
INSTRTIMES('CHEN_LINBO_BOBO120
------------------------------
3
SQL> select InStrTimes('chen_linbo_bobo12082119','_')
from dual;
INSTRTIMES('CHEN_LINBO_BOBO120
------------------------------
2
方法2:用几个oracle的内置函数
select length(regexp_replace(replace('chen_linbo_bobo12082119','_','@'),'[^@]+',''))
count from dual;
COUNT
----------
2
select length(regexp_replace(replace('chen_linbo_bobo12082119','1','@'),'[^@]+',''))
count from dual;
COUNT
----------
3
),当我写子串在母串中出现的位置的查询时,有个想法:能不能找出子串在母串中出现的次数,或者oracle有没有这样的统计函数呢?由于才学oracle没多久,所以很多知识还未触及,所以想了个最笨的方法,如下:
SQL>
select sum(case when instr('chen_libo_bobo12082119','bo')>0
then 1
else 0
end) from dual;
SUM(CASEWHENINSTR('CHEN_LIBO_B
------------------------------
1
如果正确的统计的话,应该是3次。很明显我写的语句不能正确的统计出来。
找了找,有下面两种方法:
方法1:自建一个函数
create
or replace function InStrTimes(main_str in varchar2,sub_str
in varchar2) return number
as
v_main_str varchar2(4000);
v_ms_len number;
v_ss_len number;
v_Pos number:=
0;
v_PosR number:=
0;
v_Count number:=
0;
v_Ret number:=0;
begin
v_main_str := main_str;
v_ss_len := length(sub_str);
v_ms_len := length(main_str);
begin
while v_ms_len >= v_ss_len
loop
v_Pos := instr(v_main_str,sub_str) ;
if v_Pos =0
then
exit;
else
v_Ret:=v_Ret+1;
v_main_str := substr(v_main_str,v_Pos+v_ss_len);
v_ms_len := length(v_main_str);
v_Count := v_Count +1;
v_PosR :=v_PosR+v_Pos-1;
end if;
end loop;
exception
when others then
raise;
end;
return v_Ret;
end;
SQL>
select InStrTimes('chen_linbo_bobo12082119','bo')
from dual;
INSTRTIMES('CHEN_LINBO_BOBO120
------------------------------
3
SQL> select InStrTimes('chen_linbo_bobo12082119','_')
from dual;
INSTRTIMES('CHEN_LINBO_BOBO120
------------------------------
2
方法2:用几个oracle的内置函数
select length(regexp_replace(replace('chen_linbo_bobo12082119','_','@'),'[^@]+',''))
count from dual;
COUNT
----------
2
select length(regexp_replace(replace('chen_linbo_bobo12082119','1','@'),'[^@]+',''))
count from dual;
COUNT
----------
3
相关文章推荐
- 编写函数 void count(char a[],char w[][10],int n,int b[]).功能是:统计w指向的数组中的n个单词在a指向的字符串中各自出现的次数(将非字符字符看作单词分割
- 统计字符串中的每个字符出现次数
- 从文件读取包含数字和字母字符串,统计每个字符出现的次数,将次数输出到另外一个文件
- java 使用正则表达式统计一个字符串中子字符串出现次数
- 统计字符串中各个字符出现的次数
- python---在文本/文章中统计字符串中出现单词次数
- 统计一个字符串中每个字符出现的次数,并按自然顺序输出
- C#统计字符串中字符出现的次数
- php统计所有字符在字符串中出现的次数
- 写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。
- 常见对象_统计字符串中大写小写以及数字出现的次数案例
- javascript统计字符串内字符出现次数
- Java - 写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。
- java统计字符串中单个字符出现的次数
- java学习,从一个字符串中统计同一类型出现的次数
- Oracle 函数 Translate 的用法 (可用于统计 某字符 在字符串中 出现的次数)
- 练习三:统计字符串中字符中 大写字符 小写字符 数字 其他字符 出现的次数
- 统计特定字符串出现的次数
- shell统计文件里面特定字符串出现次数
- oracle统计字符串出现次数