sqlserver实现oracle的instr函数(未完)

/*

dream9845

此函数在sqlserver中实现oracle的instr函数

@str :要查找的主字符串

@value:在@str中的字符

@startPos:从@str的第几位开始查找(只是兼容参数,暂时没处理)

@posIndex :@value在@str 中出现的次数。当@posIndex <0时表示从右边开始查找@value出现的次数,但返回值仍然是从左边查找的字符串数量。

*/

create FUNCTION [dbo].[CP_ORA_INSTR](@str VARCHAR(500),@value VARCHAR(50),@startPos INT,@posIndex INT)

RETURNS int AS 
BEGIN
DECLARE @pos int --记录位置
DECLARE @i INT --记录查找的次数
declare @tmpPos int --临时位置
declare @valueCount int --字符串中包含的最多字符数量
set @pos=0
set @i=0
set @tmpPos=0
set @valueCount=0
--@@posIndex>=0 从错往右找
if @posIndex>=0 
WHILE(@i<@posindex)
BEGIN
SET @i=@i+1
set @pos=CHARINDEX(@value,@str,@pos+1)
IF(@pos=0) RETURN 0--如果没有找到就返回0,比如abcabc其中a中出现在2次@posIndex=3的话就返回0
END
--@posIndex<0 从右往坐找
else
begin
    set @tmpPos=CHARINDEX(@value,@str,1)
--字符串里有要查的字符
if @tmpPos>0 
begin
WHILE(@tmpPos>0)
BEGIN
SET @valueCount=@valueCount+1
set @tmpPos=CHARINDEX(@value,@str,@tmpPos+1)
--IF(@pos=0) RETURN 0--如果没有找到就返回0,比如abcabc其中a中出现在2次@posIndex=3的话就返回0
END

if (@valueCount+@posindex)>0
begin


WHILE(@i<(@valueCount+@posindex+1))
BEGIN
SET @i=@i+1
set @pos=CHARINDEX(@value,@str,@pos+1)
IF(@pos=0) RETURN 0--如果没有找到就返回0,比如abcabc其中a中出现在2次@posIndex=3的话就返回0
END
--return 99
end
else
RETURN 0
end
--字符串里没有要查的字符
else
RETURN 0
end
RETURN @pos
END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值