查找某个字符在字符串中第N次出现的位置

/*
方法很多,这里简单写一个
返回@find在@str中第(@n)次出现的位置。没有第(@n)次返回0。
*/

create   function  fn_find( @find   varchar ( 8000 ),  @str   varchar ( 8000 ),  @n   smallint )
    
returns   int
as
begin
    
if   @n   <   1   return  ( 0 )
    
declare   @start   smallint @count   smallint @index   smallint @len   smallint
    
set   @index   =   charindex ( @find @str )
    
if   @index   =   0   return  ( 0 )
    
else   select   @count   =   1 @len   =   len ( @find )
    
while   @index   >   0   and   @count   <   @n
        
begin
            
set   @start   =   @index   +   @len
            
select   @index   =   charindex ( @find @str @start ),  @count   =   @count   +   1
        
end
    
if   @count   <   @n   set   @index   =   0
    
return  ( @index )
end
go


declare   @str   varchar ( 100 )
set   @str = ' A,B,C,D,A,B,C,D,C,D,B,A,C,E '

select  dbo.fn_find( ' A ' , @str , 1 as  one, dbo.fn_find( ' A ' , @str , 2 as  two, dbo.fn_find( ' A ' , @str , 3 as  three, dbo.fn_find( ' A ' , @str , 4 as  four
/*
one         two         three       four        
----------- ----------- ----------- ----------- 
1           9           23          0
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值