热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLServer数据库Split函数的使用方法

SQL对字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样的字符串,如果用数组的话,遍历很简单,但是T-SQL不支持数组&#xff
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(&#64;split,&#64;c)<>0)
begin
insert &#64;t(col) values (substring(&#64;c,1,charindex(&#64;split,&#64;c)-1))
set &#64;c &#61; stuff(&#64;c,1,charindex(&#64;split,&#64;c),&#39;&#39;)
end
insert &#64;t(col) values (&#64;c)
return
end
go
select * from dbo.f_split(&#39;dfkd,dfdkdf,dfdkf,dffjk&#39;,&#39;,&#39;)
drop function f_split
col
--------------------
dfkd
dfdkdf
dfdkf
dffjk


 

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

CREATE function Get_StrArrayLength
(
&#64;str varchar(1024), --要分割的字符串
&#64;split varchar(10) --分隔符号
)
returns int
as
begin
declare &#64;location int
declare &#64;start int
declare &#64;length int

set &#64;str&#61;ltrim(rtrim(&#64;str))
set &#64;location&#61;charindex(&#64;split,&#64;str)
set &#64;length&#61;1
while &#64;location<>0
begin
set &#64;start&#61;&#64;location&#43;1
set &#64;location&#61;charindex(&#64;split,&#64;str,&#64;start)
set &#64;length&#61;&#64;length&#43;1
end
return &#64;length
end

调用示例&#xff1a;select dbo.Get_StrArrayLength(&#39;78,1,2,3&#39;,&#39;,&#39;)

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

CREATE function Get_StrArrayStrOfIndex
(
&#64;str varchar(1024), --要分割的字符串
&#64;split varchar(10), --分隔符号
&#64;index int --取第几个元素
)
returns varchar(1024)
as
begin
declare &#64;location int
declare &#64;start int
declare &#64;next int
declare &#64;seed int

set &#64;str&#61;ltrim(rtrim(&#64;str))
set &#64;start&#61;1
set &#64;next&#61;1
set &#64;seed&#61;len(&#64;split)

set &#64;location&#61;charindex(&#64;split,&#64;str)
while &#64;location<>0 and &#64;index>&#64;next
begin
set &#64;start&#61;&#64;location&#43;&#64;seed
set &#64;location&#61;charindex(&#64;split,&#64;str,&#64;start)
set &#64;next&#61;&#64;next&#43;1
end
if &#64;location &#61;0 select &#64;location &#61;len(&#64;str)&#43;1
--这儿存在两种情况&#xff1a;1、字符串不存在分隔符号 2、字符串中存在分隔符号&#xff0c;跳出while循环后&#xff0c;&#64;location为0&#xff0c;那默认为字符串后边有一个分隔符号。

return substring(&#64;str,&#64;start,&#64;location-&#64;start)
end

四、结合上边两个函数&#xff0c;象数组一样遍历字符串中的元素
declare &#64;str varchar(50)
set &#64;str&#61;&#39;1,2,3,4,5&#39;
declare &#64;next int
set &#64;next&#61;1
while &#64;next<&#61;dbo.Get_StrArrayLength(&#64;str,&#39;,&#39;)
begin
print dbo.Get_StrArrayStrOfIndex(&#64;str,&#39;,&#39;,&#64;next)
set &#64;next&#61;&#64;next&#43;1
end

调用结果&#xff1a;
1
2
3
4
5


推荐阅读
author-avatar
技术潜行者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有