sql 数组


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

 

 

转自哪不记得了,仅个人学习收藏用

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM