CREATE OR ALTER FUNCTION MY_INSTR(@STR1 VARCHAR(500), @STR2 VARCHAR(100), @N INT)
RETURNS INT
AS
BEGIN
DECLARE @STR1_LENGTH INT, --目标字符串的长度
@STR2_LENGTH INT,--子字符串的长度
@STR1_INDEX INT = 1,--目标字符串的索引标号
@J INT = 0 --子字符串在目标字符串已经出现的次数
SET @STR1_LENGTH = (SELECT Len(@STR1));
SET @STR2_LENGTH = (SELECT Len(@STR2));
WHILE @STR1_INDEX <= @STR1_LENGTH
BEGIN
IF (SELECT Substring(@STR1, @STR1_INDEX, @STR2_LENGTH)) = @STR2 --判断截取的字符串是否与子字符串相等
BEGIN
SET @J = @J + 1;--出现的次数加一
IF @J = @N
BEGIN
RETURN @STR1_INDEX
END;
END;
SET @STR1_INDEX = @STR1_INDEX + 1;
END;
RETURN 0 --目标字符串不存在子字符串或者存在的数量少于需要查询的次数
END;
SELECT DBO.MY_INSTR('AA SB AA NN AA', 'AA', 3)
MY_INSTR(目标字符串, 子字符串, 第几次出现)
如果子字符串不存在,返回0
如果查找的次数超过子字符串在目标字符串出现的次数,返回0