T-SQL对字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样的字符串,如果用数组的话,遍历很简单,但是T-SQL不支持数组,所以处理下来比较麻烦。下边的函数,实现了象数组一样去处理字符串。
一,用临时表作为数组。

create   function   f_split(@c   varchar(2000),@split   varchar(2))
returns   @t   table(col   varchar(20))
as   begin   while(charindex(@split,@c)<>0)   begin   insert   @t(col)   values   (substring(@c,1,charindex(@split,@c)-1))   set   @c   =   stuff(@c,1,charindex(@split,@c),'')   end   insert   @t(col)   values   (@c)   return   end
go   select   *   from   dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',')   drop   function   f_split
col
--------------------
dfkd
dfdkdf
dfdkf
dffjk


(所影响的行数为 4 行)

二、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。

CREATE function Get_StrArrayLength
(
@str varchar(1024), --要分割的字符串
@split varchar(10) --分隔符号
)
returns int
as
begin
declare @location int
declare @start int
declare @length intset @str=ltrim(rtrim(@str))
set @location=charindex(@split,@str)
set @length=1
while @location<>0
beginset @start=@location+1set @location=charindex(@split,@str,@start)set @length=@length+1
end
return @length
end

调用示例:

select dbo.Get_StrArrayLength('78,1,2,3',',')

返回值:4

三、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便

CREATE function Get_StrArrayStrOfIndex
(
@str varchar(1024), --要分割的字符串
@split varchar(10), --分隔符号
@index int --取第几个元素
)
returns varchar(1024)
as
begin
declare @location int
declare @start int
declare @next int
declare @seed intset @str=ltrim(rtrim(@str))
set @start=1
set @next=1
set @seed=len(@split)set @location=charindex(@split,@str)
while @location<>0 and @index>@next
beginset @start=@location+@seedset @location=charindex(@split,@str,@start)set @next=@next+1
end
if @location =0 select @location =len(@str)+1
--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。return substring(@str,@start,@location-@start)
end

调用示例:

select dbo.Get_StrArrayStrOfIndex('8,9,4',',',2)

返回值:9

三、结合上边两个函数,象数组一样遍历字符串中的元素

declare @str varchar(50)
set @str='1,2,3,4,5'
declare @next int
set @next=1
while @next<=dbo.Get_StrArrayLength(@str,',')
begin
print dbo.Get_StrArrayStrOfIndex(@str,',',@next)
set @next=@next+1
end

调用结果:

1
2
3
4
5
//-------------------------------------------------------------------------------------------------------------------------
select f1,f2,f3,left(A,charindex('_',A)-1)
from 表名
order by left(A,charindex('_',A)-1)

SQL分割字符串详解相关推荐

  1. 站长在线Python精讲:在Python中使用正则表达式的split()方法分割字符串详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用正则表达式的split()方法分割字符串详解>. 使用正则表达式分割字符串 在Python中使用正则表达 ...

  2. java分割例子,Java 分割字符串详解及实例代码

    Java 分割字符串 java.lang.String 的 split() 方法, JDK 1.4 or later public String[] split(String regex,int li ...

  3. 站长在线Python精讲:在Python中使用正则表达式的sub()方法替换字符串详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用正则表达式的sub()方法替换字符串详解>. 在Python中使用正则表达式的sub()方法替换字符串. ...

  4. MS SQL Server 数据库连接字符串详解

    MS SQL Server 数据库连接字符串详解 问题 : 超时时间已到.在从池中获取连接之前超时时间已过.出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小. 解决办法 1. 在代码里面 ...

  5. php分解字符串_php字符串分割的详解

    php字符串分割的详解 比较两个字符串是否相等,最常见的方法就是使用"==="来判断,至于它和"=="的.区别,简单来说就是前者强调"Identica ...

  6. 站长在线Python精讲:在Python中使用split()方法分割、使用join()方法合并字符串详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用split()方法分割.使用join()方法合并字符串详解>.本知识点主要内容有:在Python中使用s ...

  7. Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解

    前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误.其实sql注入漏洞就是一个.作为一个菜鸟小程 ...

  8. python 字符串替换_Python基础教程,第四讲,字符串详解

    本节课主要和大家一起学习一下Python中的字符串操作,对字符串的操作在开发工作中的使用频率比较高,所以单独作为一课来讲. 学完此次课程,我能做什么? 学完本次课程后,我们将学会如何创建字符串,以及如 ...

  9. python字符串是什么_python字符串详解

    字符串详解 在python中引号引起来的就是字符串 字符串是用来存储少量数据 索引 索引(下标) 通过索引可以精确的定位到某个元素 name = "meat" meat 每一个字母 ...

最新文章

  1. 【go】sdk + idea-plugin 开发工具安装
  2. Web API 持续集成:PostMan+Newman+Jenkins(图文讲解)
  3. localhost与127.0.0.1的区别
  4. 计算机 二进制 中国,二进制与计算机
  5. ViewPager+TabLayout
  6. android studio transformclasseswithJarMergingForDebug报错
  7. Xilinx 拥抱“新基建” 发力大中华区核心市场
  8. python挂机脚本阴阳师_Python简单实现阴阳师挂机脚本
  9. 分享到facebook没有封面图_拾柒自制书封面图分享~
  10. 单进程select版-TCP服务器(python 版)
  11. 每天一点点之vue框架开发 - vue坑-input 的checked渲染问题
  12. LG 出售中国总部大楼;苹果延长疫情期间 Apple 设备保修期;Linux 5.6 新特性 | 极客头条...
  13. 后面冒号_Python 数组中的冒号使用
  14. C++基础::Stream(二)
  15. windows下sakai配置过程
  16. unity3d TextMeshPro使用中文字体(秒懂)
  17. 汇编intel 8086/8088/80386 学习
  18. Ozone Block Chunk文件的layout方式
  19. 操作的基本原则,每日必读【不断更新中】
  20. 计算机歌曲数我的一个道姑朋友,同人歌|我的一个道姑朋友

热门文章

  1. java通过证书获取CN_java – 从证书DN解析CN [重复]
  2. 计算机系 跨考 天文,非天文本科生,可以跨专业考天文方面的研究生吗?
  3. docker 关闭所有容器_软件安全 : Docker逃逸详解
  4. JavaEE持久层框架对比与hibernate主键生成策略总结
  5. git生成SSH密钥提示ssh文件不存在-已解决
  6. Git21天打卡day9-查看远程仓库分支git branch -a
  7. linux下搭建博客day3-git安装
  8. 月薪11.5K 土木人零基础转行软件测试工程师,他都经历了什么?
  9. 10分钟学会数据库压力测试
  10. electron加载html加载不起来,Electron 预加载远程页面提升用户体验