zoukankan      html  css  js  c++  java
  • sql语句循环截取字符串

    测试环境 : mssql2016 express

    需求 : 拆分字符串执行insert

    思路 : 在循环中截取分隔符之间的字符串.起止点位置计算

         起点从0开始startIndex,查找第一个分隔符位置endIndex.下一次循环时,将endIndex+1作为起来,再查找其之后的第一个分隔符位置.直到查找到最后一个分隔符位置.

        当找到最后一个分隔符位置时,下一个止点位置为0循环会结束,而处理不到最后分隔符与字符串结尾处的那个子串,即最后一个单元.所以源字符串起点不含分隔符,但结束时包含.例如:

        A,Sql,C#,public,dynamic,  // 用逗号分隔的字符串,起点不含分隔符,但结束时用分隔符结束

     1 DECLARE @string as nvarchar(max) -- 源字符串,子串间用分隔符隔开
     2 DECLARE @spchar as char(1)         -- 分隔符
     3 DECLARE @startIndex as int         -- 起点
     4 DECLARE @endIndex as int         -- 结束点
     5 DECLARE @log as nvarchar(max)     -- 执行记录
     6 DECLARE @count as int             -- 查找次数
     7 
     8 SET @spchar=',' -- 分隔符
     9 -- 源字符串,起点不包含分隔符,结束包含分隔符
    10 SET @string='A,Sql,C#,public,dynamic,' 
    11 SET @startIndex=0 -- 0位置为初起点
    12 SET @log=''
    13 SET @count=1
    14 SELECT @endIndex=CHARINDEX(@spchar,@string);-- 第1个分隔符位置为结束点
    15 -- charindex找不到字符串时,返回0.循环成立条件是能找到分隔符
    16 WHILE @endIndex>0
    17 BEGIN
    18     DECLARE @subStr as nvarchar(20) -- 子字符串
    19     -- 根据起止点及起止点之差为长度找出子字符串
    20     SELECT @subStr=SUBSTRING(@string,@startIndex,@endIndex-@startIndex)
    21     -- 下一起点为当前止点加1
    22     SET @startIndex=@endIndex+1
    23     -- 查找下一分隔符位置,即新的止点
    24     SET @endIndex=CHARINDEX(@spchar,@string,@startIndex);
    25  
    26     SET @log=@log+N' | 第'+CAST(@count AS VARCHAR)+N'次查找到: '+@subStr
    27     SET @count=@count+1
    28 END
    29 SELECT @log

    执行结果 :  | 第1次查找到: A | 第2次查找到: Sql | 第3次查找到: C# | 第4次查找到: public | 第5次查找到: dynamic

  • 相关阅读:
    canvas 平移&缩放
    html + css + jquery实现简单的进度条实例
    jQuery Layer mobile 弹出层
    jQuery-全屏滚动插件【fullPage.js】API 使用方法总结
    Hive:select count(distinct)优化以及hive.groupby.skewindata
    Spark Application、Driver、Job、stage、task
    Spark 参数说明
    Xgboost小结与调参
    梯度下降算法过程详细解读
    机器学习杂记
  • 原文地址:https://www.cnblogs.com/mirrortom/p/8496334.html
Copyright © 2011-2022 走看看