sql语句循环截取字符串
测试环境 : 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语句查询的时候就截取,就去网上找了一下,挺好用,就转了过来: 合并单元格: /// &l ...
- sql语句的截取字符串下标是从1开始
这里的指的sqliter数据库 substr函数 substr(date,1,10)
- SQL Server中截取字符串常用函数
SQL Server 中截取字符串常用的函数: .LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要截 ...
- SQL Server 中截取字符串常用的函数
SQL Server 中截取字符串常用的函数: 1.LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要 ...
- sql server中截取字符串的常用函数
我们如果要在sql server中,使用截取字符串的方法要怎样使用呢? sql server提供了3个常用截取字符串方法,LEFT().RIGHT().SUBSTRING() /****** Sql ...
- Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)
Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项) A.cat B.concat C.join D.+ 解答:B
- Sql语句模糊查询字符串的两种写法
Sql语句模糊查询有两种写法,一种是在jdbcTemplate的查询方法参数里拼接字符串%,一种是在Sql语句里拼接%字符串. public class IsNameDaoImpl implement ...
- 解决存储过程中拼接的SQL字符串超长导致sql语句被截取的问题
今天遇到了一个奇葩的问题:存储过程中的sql字符串拼接的太长,超出了分页存储过程执行sql参数的nvarchar(4000)的长度. 没办法,只能修改自己的存储过程,因为分页存储过程是不能动的. 开始 ...
- sql语句可以截取指定字段后面的字符串
select id,substring(Memo,charindex('数量',Memo)+3,len(Memo)-charindex('数量',Memo)) from trace where Mem ...
随机推荐
- org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manu
这个是sql 语句 错误 仔细检查 SQL语句是否写错了 org.apache.ibatis.exceptions.PersistenceException: ### Error queryi ...
- nginx学习笔记二
一,nginx架构在Linux系统中以daemon(守护进程)的方式在后台运行,后台进程包含一个master进程和多个worker进程(多进程的工作方式) master进程 | 信号 | | ---- ...
- MariaDB 和 MySQL 比较
MariaDB.org - Supporting continuity and open collaborationhttps://mariadb.org/ MariaDB 和 MySQL 比较 - ...
- Velocity中为什么要使用{}来明确标识变量
原因 比如在页面中,页面中有一个$someonename,此时,Velocity将把someonename作为变量名,若我们程序是想在someone这 个变量的后面紧接着显示name字符,则上面的标签 ...
- Java 里如何实现线程间通信(转载)
出处:http://www.importnew.com/26850.html 正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程 ...
- jQuery操作复选框checkbox技巧总结 ---- 设置选中、取消选中、获取被选中的值、判断是否选中等
转载:https://blog.csdn.net/chenchunlin526/article/details/77448168 jQuery操作复选框checkbox技巧总结 --- 设置选中.取消 ...
- Kettle中表输出字段和字段选择
表输出: 字段选择: 注:字段选择可以输出匹配后的选中列,表输出则输出匹配后的所有列.
- class面向对象-2
hasattr/getattr/setattr/delattr #通过字符串判断/获取/新增/删除对象属性或方法 class att(object): def __init__(self,var): ...
- python 第三方包安装
1.tqdm 安装 pip install tqdm 使用时可能会报缺少stopwords.punkt错,原因是缺失相应文件,下载即可: import nltk nltk.download('sto ...
- SpringMvc父子容器
使用监听器listener来加载spring的配置文件:如下 <context-param> <param-name>contextConfigLocation</p ...