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 ...
随机推荐
- Django之事务
Django之事务 事务就是将一组操作捆绑在一起,只有当这一组操作全部都成功以后这个事务才算成功;当这组操作中有任何一个没有操作成功,则这个操作就会回滚,回到操作之前的状态. 其中牵扯到向数据库中写数 ...
- js基础语法之函数
普通函数 function foo(a, b){ return a + b; } foo(10, 20) >>> 30 匿名函数 var f = function(){console ...
- #Leetcode# 942. DI String Match
https://leetcode.com/problems/di-string-match/ Given a string S that only contains "I" (in ...
- 哈尔滨工程大学ACM预热赛
https://ac.nowcoder.com/acm/contest/554#question A #include <bits/stdc++.h> using namespace st ...
- Migrate MySQL database using dump and restore
kaorimatz/mysqldump-loader: Load a MySQL dump file using LOAD DATA INFILEhttps://github.com/kaorimat ...
- 3proxy使用方法
转自:DRL@fireinice写的教程 ******************************************************************************* ...
- 使用ThreadLocal管理Mybatis中SqlSession对象
转自http://blog.csdn.net/qq_29227939/article/details/52029065 public class MybatisUtil { private stati ...
- IdentityServer4【Topic】之StartUp中的配置
Startup 身份服务器是中间件和服务的组合.所有的配置都是在启动类中完成的. Configuring services 通过调用如下代码在DI(dependency inject,依赖注入)中添加 ...
- Azure系列2.1.4 —— BlobInputStream
(小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...
- Windows 下面 redis 发布为服务的官方方法
除了 NSSM 之外 另外一种方式 感觉还是很好用的 redis-server --service-install redis.windows.conf --loglevel verbose 感觉也可 ...