解决SQL server在一个字符串中,指定的字符出现第几次的位置

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
SQL Server提供了多个函数来截取指定字符串,其最常用的是SUBSTRING函数。SUBSTRING函数可以从一个字符串截取出一部分子字符串。 其语法如下: SUBSTRING(string, start, length) 其,string表示要被截取的字符串,start表示要截取的起始位置,length表示要截取的长度。下面是这些参数的具体含义: - string:要截取的字符串,必须是字符型。 - start:要截取的起始位置,可以是整数型、小数型或字符型。如果是小数型,则自动转为整数。 - length:要截取的长度,可以是整数型、小数型或字符型。如果是小数型,则自动转为整数。如果省略该参数,则截取从start位置开始的所有字符。 需要注意的是,SQL Server的SUBSTRING函数和其他数据库或编程语言的类似函数有所不同,在几个方面有自己独特的特点,例如: 1. 起始位置是从1开始计数的,而不是从0; 2. 如果start的值比string的长度小,那么截取的起始位置就是start,否则返回空值; 3. 如果length的值小于等于0,那么返回空值; 4. 截取的长度不能超过string的长度。 示例: SELECT SUBSTRING('Hello World', 2, 3) --输出结果:ell 说明:截取从第2个字符开始的长度为3的子字符串。 SELECT SUBSTRING('Hello', 2) --输出结果:ello 说明:截取从第2个字符开始的所有字符。 SELECT SUBSTRING('Hello', 7) --输出结果:空值 说明:截取的起始位置超出了字符串的长度,因此返回空值。 通过使用SUBSTRING函数,你可以轻松地截取指定字符串。当然,除了SUBSTRING函数,SQL Server还支持其他字符串截取函数,如LEFT、RIGHT、PATINDEX、CHARINDEX等等,根据不同的需求,可以灵活运用这些函数来进行字符串操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易守年嘉爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值