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

来源:互联网 发布:mac安装sublime text2 编辑:程序博客网 时间:2024/05/21 14:57

/*

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
0 0
原创粉丝点击