sql语句循环截取字符串
2018-03-03 12:35
387 查看
测试环境 : mssql2016 express
需求 : 拆分字符串执行insert
思路 : 在循环中截取分隔符之间的字符串.起止点位置计算
起点从0开始startIndex,查找第一个分隔符位置endIndex.下一次循环时,将endIndex+1作为起来,再查找其之后的第一个分隔符位置.直到查找到最后一个分隔符位置.
当找到最后一个分隔符位置时,下一个止点位置为0循环会结束,而处理不到最后分隔符与字符串结尾处的那个子串,即最后一个单元.所以源字符串起点不含分隔符,但结束时包含.例如:
A,Sql,C#,public,dynamic, // 用逗号分隔的字符串,起点不含分隔符,但结束时用分隔符结束
DECLARE @string as nvarchar(max) -- 源字符串,子串间用分隔符隔开 DECLARE @spchar as char(1) -- 分隔符 DECLARE @startIndex as int -- 起点 DECLARE @endIndex as int -- 结束点 DECLARE @log as nvarchar(max) -- 执行记录 DECLARE @count as int -- 查找次数 SET @spchar=',' -- 分隔符 -- 源字符串,起点不包含分隔符,结束包含分隔符 SET @string='A,Sql,C#,public,dynamic,' SET @startIndex=0 -- 0位置为初起点 SET @log='' SET @count=1 SELECT @endIndex=CHARINDEX(@spchar,@string);-- 第1个分隔符位置为结束点 -- charindex找不到字符串时,返回0.循环成立条件是能找到分隔符 WHILE @endIndex>0 BEGIN DECLARE @subStr as nvarchar(20) -- 子字符串 -- 根据起止点及起止点之差为长度找出子字符串 SELECT @subStr=SUBSTRING(@string,@startIndex,@endIndex-@startIndex) -- 下一起点为当前止点加1 SET @startIndex=@endIndex+1 -- 查找下一分隔符位置,即新的止点 SET @endIndex=CHARINDEX(@spchar,@string,@startIndex); SET @log=@log+N' | 第'+CAST(@count AS VARCHAR)+N'次查找到: '+@subStr SET @count=@count+1 END SELECT @log
执行结果 : | 第1次查找到: A | 第2次查找到: Sql | 第3次查找到: C# | 第4次查找到: public | 第5次查找到: dynamic
相关文章推荐
- sql语句,如何截取指定字段某一个字符出现后的后面的字符串吗?
- 几个SQL语句。截取带条件的字符串
- SQL 循环截取法分割字符串,默认返回数据表
- mysql sql语句提取截取字段值中的数字字符串,动态截图指定字符串数字
- SQL语句中截取字符串Substr
- SQL语句中截取字符串Substr
- 解决存储过程中拼接的SQL字符串超长导致sql语句被截取的问题
- 小黑小波比.sql语句截取字符串的子串
- 在MYSQL的SQL语句中截取字符串的函数SUBSTRING
- sql语句中截取字符串
- SQL语句截取字符串
- 在MYSQL的SQL语句中截取字符串的函数SUBSTRING
- sql语句中charindex的用法 可用于截取字符串
- SQL语句中截取字符串方法
- sql 语句 截取字符串的两种方案
- mybatis按照关键字(符号)截取字符串,字符串拼接,循环查询语句,分组求和函数用法
- sql语句的截取字符串下标是从1开始
- sql语句中截取字符串
- MS SQL Server 字符串截取
- SQL 循环输出以逗号分开的字符串,字符串可当做数组使用