需要一个函数 知道一个字符串在另一个字符串中出现几次

bbshero 2006-12-19 02:10:54
比如
function f('a',''ghgaguygag')=2

...全文
215 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bbshero 2006-12-20
  • 打赏
  • 举报
回复
感谢“包建军”
baojianjun(包子)
jinweifu 2006-12-19
  • 打赏
  • 举报
回复
create or replace function(strSource in nvarchar2,strFind in nvarchar2)
return number
is
result number:=0;
begin
loop
pos1:=instr(strSource,strFind,1,result+1);
exit when pos=0;
result:=result+1;
end loop
return result;
end;

哈哈 又搞错了 我是初学者 不要见怪
jinweifu 2006-12-19
  • 打赏
  • 举报
回复
create or replace function(strSource in nvarchar2,strFind in nvarchar2)
return number
is
result number:=0;
begin
loop
pos1=instr(strSource,strFind,1,result+1);
exit when pos=0;
result=result+1;
end loop
return result;
end;

这样试试
baojianjun 2006-12-19
  • 打赏
  • 举报
回复
使用translate函数就可以了
for example :
ifsapp@PRACTICE>select length(trim(translate('asdasdasdasd','bcedfghijklmnopqrstuvwxyz',' '))) a_len from dual;

A_LEN
----------
4


介绍一下Translate函数的使用
Translate函数的语法:
translate(char,from_string,to_string)
------------------------------------------------------------------------------------------------------
参数 说明
------------------------------------------------------------------------------------------------------
char 是需要进行替换的字符串。
from_string 是将要被替换的字符串。
to_string 是替代的字符串。请注意,在此处不能为''(空字符串),Oracle把空字符串当
作null来处理,因此,如果to_string为'',则函数返回null。
------------------------------------------------------------------------------------------------------
******************************************************************************************************
------------------------------------------------------------------------------------------------------
Translate函数处理的流程描述:
1.遍历char中的每一个字符(为了方便描述,我们在此处假设定义一个变量Current_Char来存储它)。
2.判断Current_Char是否在from_string中出现?
2.1.如果没有出现,则不做处理。
2.2.如果有出现。
2.2.1.首先获取Current_Char在from_string中的位置Current_Position(表示它是from_string中的第几
个字符)。
2.2.2.然后获得字符串to_string中位置为Current_Position的字符(我们假设定义一个变量Replace_Char
来存储它)。
Note:
1>如果Current_Char在from_string中出现了多次,则Current_Position为找到的第一个相匹配的字
符的位置
例如:
SQL> select translate('ds1231fd','dd','DG') from dual;

TRANSLAT
--------
Ds1231fD
2>如果from_string的长度比to_string长,则多出的字符将会被移除。
例如:
SQL> select translate('ds1213fg','dsfg','-') from dual;

TRANS
-----
-1213
3>如果from_string的长度比to_string短,则to_string中多出的字符可以忽略,不参与运算。
例如:
SQL> select translate('ds1213fg','ds','DSFG') from dual;

TRANSLAT
--------
DS1213fg
2.2.3.用Replace_Char替换掉Current_Char。
3.遍历完后将进行了替换的char输出。


jinweifu 2006-12-19
  • 打赏
  • 举报
回复
利用LPAD把该字符去掉然后统计他的长度,原先长度减去用空字符替代后的长度就是字符出现次数
realx 2006-12-19
  • 打赏
  • 举报
回复
自己写函数吧,还有f('aa','aaaa')=?

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧