• 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
  • 相关阅读:
    安卓输入法
    android问题
    速查
    Iphone幻灯片效果+背景音乐
    MBProgressHUD使用
    画图
    textmate 的快捷键
    设置Table Cell的背景图的类
    Objectc 一些代码规范
    效果收集
  • 原文地址:https://www.cnblogs.com/zhchsh/p/6145460.html
Copyright © 2020-2023  润新知