加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 13:07:00 所属栏目:MsSql教程 来源:网络整理
导读:/* dream9845 此函数在sqlserver中实现oracle的instr函数 @str :要查找的主字符串 @value:在@str中的字符 @startPos:从@str的第几位开始查找(只是兼容参数,暂时没处理) @posIndex :@value在@str 中出现的次数。当@posIndex 0时表示从右边开始查找@val

/*

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,1) --字符串里有要查的字符 if @tmpPos>0? begin WHILE(@tmpPos>0) BEGIN SET @valueCount=@valueCount+1 set @tmpPos=CHARINDEX(@value,@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,比如abcabc其中a中出现在2次@posIndex=3的话就返回0 END --return 99 end else RETURN 0 end --字符串里没有要查的字符 else RETURN 0 end RETURN @pos END

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读