您的位置:首页 > 数据库

如何在T-sql 中实现数组的功能

2015-02-07 12:04 399 查看
T-SQL象数组一样处理字符串、分割字符串    在日常的编程过程中,数组是要经常使用到的。在利用SQL对数据库进行操作时,有时就想在SQL使用数组,比如将1,2,3,4,5拆分成数组。可惜的是在T-SQL中不支持数组。不过还是有变通的办法。我们可以自己编写两函数Get_StrArrayLength(取得字符串的长度-元素的个数)和Get_StrArrayStrOfIndex(按指定符号分割字符串,返回分割后指定索引的第几个元素)。有了这两个函数,我们就可以非常方便的在T-SQL中处理形如1,2,3,4,5这样的字符串了。

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

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

CREATE function Get_StrArrayLength

(

 @str varchar(1024),  --要分割的字符串

 @split varchar(10)  --分隔符号

)

returns int

as

 begin

  declare @location int

  declare @start int

  declare @length int

  set @str=ltrim(rtrim(@str))

  set @location=charindex(@split,@str)

  set @length=1

   while @location<>0

     begin

      set @start=@location+1

      set @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 int

 set @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

   begin

    set @start=@location+@seed

    set @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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql server 2005