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 ...
随机推荐
- 【问题解决方案】Dev C++ 无法调试的问题与解决
听翁恺老师课的时候用到一个叫DevC++的编辑器. 学到调试部分的时候,老师的没问题我的报错.我?? 试一试网上查到的方法: 工具 --> 编译选项 --> 代码生成/优化 --> ...
- IDEA通过Git同步代码到Coding
准备工作: (1)在本地创建好项目 (2)在coding创建好项目,并设置公开 1.创建Git仓库 2.选择对应的本地项目文件夹 以上两步相当于在项目文件夹中git bash here 并 ...
- CodeForces Round #550 Div.3
http://codeforces.com/contest/1144 A. Diverse Strings A string is called diverse if it contains cons ...
- Spring、MyBatis、Shiro、Quartz、Activiti框架
https://www.renren.io/ 人人开源:基于Spring.MyBatis.Shiro框架,开发的一套后台脚手架框架(权限系统),极低门槛,拿来即用.支持分布式部署.Quartz分布式集 ...
- Oracle创建表空间、用户以及给用户赋权
--创建表空间 create tablespace waterboss datafile 'd:\waterboss.dbf' size 100m autoextend on next 10m --创 ...
- laravel中如何在模型中自关联?
https://segmentfault.com/q/1010000007926567 在模型中声明一对多的关系,关联表本身.parent_id对应父记录的id.我在sof中查阅到很多这样的写法: p ...
- 高并发之API接口限流
在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再 ...
- Python 基础之----网络编程
阅读目录 一 客户端/服务端架构 二 osi七层 三 socket层 四 socket是什么 五 套接字发展史及分类 六 套接字工作流程 七 基于TCP的套接字 八 基于UDP的套接字 九 粘包现象 ...
- linux上如何让other用户访问没有other权限的目录
目前遇到一个问题,一个other用户要访问一个目录,他需要在这个目录下创建文件,因此这个目录需要一个写权限,于是就给了这个目录777的权限,这样这个权限有点太大了,很容易出现安全问题,那我们应该怎么办 ...
- StatefulSet
StatefulSet: 1.稳点且唯一的网络标识符 2.稳点且持久的存储 3.有序.平滑的部署和扩展 4.有序.平滑的删除和终止 5.有序的滚动更新 三个组件组成:headless(无头服务) ...