SQL處理數組,字符串轉換爲數組

原文轉載自:http://hi.baidu.com/gagahjt/item/fd081316450f05028ebde413

一、按指定符號分割字符串,返回分割後的元素個數,方法很簡單,就是看字符串中存在多少個分隔符號,然後再加一,就是要求的結果。

 rtrim(@str)去掉 @str右邊的字符 ltrim(@str)去掉左邊的字符 ltrim(rtrim(@str))去掉左右空格

charindex  在變量@str中@split的index即索引值

create function Get_StrArrayLength
(
  @str varchar(5000),  --要分割的字符串
  @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

 二、按指定符號分割字符串,返回分割後指定索引的第幾個元素,象數組一樣方便

 

create function Get_StrArrayStrOfIndex
(
  @str varchar(5000),  --要分割的字符串
  @split varchar(10),  --分隔符號
  @index int --取第幾個元素
)
returns varchar(5000)
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 
  return substring(@str,@start,@location-@start)
end

 

調用示例

 

declare @str varchar(5000)
set @str='1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48'
print dbo.Get_StrArrayLength(@str,',')
declare @next int 
declare @s varchar(100) 
set @next=1
while @next<=dbo.Get_StrArrayLength(@str,',')
begin
  print dbo.Get_StrArrayStrOfIndex(@str,',',@next) ----輸出數組中的值
  set @next=@next+1
end

 

三、檢查一個元素是否在數組中


Create function CheckStrInArr(@s as varchar(50),@sArr as varchar(5000)) returns int
as 
begin
declare @str varchar(5000)
set @str=@sArr
declare @next int  
declare @ret int
set @ret=0
set @next=1
while @next<=dbo.Get_StrArrayLength(@str,',')
begin
   if dbo.Get_StrArrayStrOfIndex(@str,',',@next)=@s 
  begin
  set @ret=1;
  end
   set @next=@next+1
end
return @ret
end

-- =========調用示例========
declare @a int
set @a=dbo.CheckStrInArr('8','2,3,5,8')
select @a
-- =========調用示例========

五 檢查一個元素是否與數組中的相匹配


--select dbo.CheckStrLikeInArr(2,'d','sde,df,aad,d,fgsa,fgd')
Create function CheckStrLikeInArr
(
@liketype int=0,                      --like類型(0爲爲@keyword%,2爲) 一般只用0
@keyword as varchar(50),      --要檢查的關鍵字
@sArr as varchar(5000)        --數組
) 
returns nvarchar(max)
as 
begin
declare @str varchar(5000)
   set @str=@sArr
declare @start int 
declare @result nvarchar(max)
   set @result=''
   set @start=1
declare @temp nvarchar(20);
while @start<=dbo.Get_StrArrayLength(@str,',')
begin
   if @liketype=0
    begin
     set @temp=dbo.Get_StrArrayStrOfIndex(@str,',',@start);
       if @temp like '%'+ @keyword+'%'
       begin
        set @result=@result+ @temp +',';
       end
      set @start=@start+1
    end
   else if @liketype=1
    begin

      if dbo.Get_StrArrayStrOfIndex(@str,',',@start) like ''+ @keyword +'%'
       begin
          set @result=dbo.Get_StrArrayStrOfIndex(@str, ',' , @start)+',';
       end
      set @start=@start+1
     end
   else if @liketype=2
    begin
       
                    if dbo.Get_StrArrayStrOfIndex( @str, ',' , @start) like '%'+ @keyword+''
       begin
           set @result=dbo.Get_StrArrayStrOfIndex(@str, ',' , @start)+',';
       end
      set @start=@start+1
    end
end
return @result
--    return cast(dbo.Get_StrArrayLength(@result,',')as nvarchar(2000)) 
end

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章