当前位置:数据库 > 数据库管理> 正文

sql server中实现split功能

时间:2015-4-6类别:数据库

sql server中实现split功能

sql server中实现split功能

一、实现形式一 :Split 表函数将一个字符串按指定分隔符进行分割,返回一个表

 

  •  
  • SQL 代码   复制
  • 
    --Split 表函数将一个字符串按指定分隔符进行分割,返回一个表。
    create function split(
        @string varchar(255),--待分割字符串
        @separator varchar(255)--分割符
    )returns @array table(item varchar(255))
    as
    begin
        declare @begin int,@end int,@item varchar(255)
        set @begin = 1
        set @end=charindex(@separator,@string,@begin)
        while(@end<>0)
        begin
            set @item = substring(@string,@begin,@end-@begin)
            insert into @array(item) values(@item)
            set @begin = @end+1
            set @end=charindex(@separator,@string,@begin)
        end
        set @item = substring(@string,@begin,len(@string)+1-@begin)
        if (len(@item)>0)
            insert into @array(item) values(substring(@string,@begin,len(@string)+1-@begin))
        return
    end
    
    		
  • 测试一

    select * from dbo.split('a,b,c,d',',')

    或者(待分割字符串末尾多了个逗号)

    select * from dbo.split('a,b,c,d,',',')

    结果

     

    测试二

    select * from dbo.split(',a,,b,c,d',',')

    结果

     

     

    二、方式二:用指定字符串分割后,返回第几个数据

     

  •  
  • SQL 代码   复制
  • 
    create  function [dbo].[fn_split] 
    ( 
    @inputstr varchar(8000), 
    @seprator varchar(10),
    @p int                   --要取第几个数据,从0开始,如果要返回分割后的数组列表清删除--##部分即可
    ) 
    returns @temp table (a varchar(200)) 
    as 
    
    begin 
     declare @i int 
     declare @n int  --记录循环的次数
     set @inputstr = rtrim(ltrim(@inputstr)) 
     set @i = charindex(@seprator, @inputstr) 
     SET @n =0        --##
    
      WHILE @i>=1
     begin 
      IF  @p=@n  --##
       begin
         insert @temp values(left(@inputstr, @i - 1)) 
       end
      set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i) 
      set @i = charindex(@seprator, @inputstr) 
      SET @n = @n+1 --##
     END
    
    if @inputstr <> '' --最后一位
     IF  @p=@n         --##
      insert @temp values(@inputstr) 
    return 
    end 
    
    		
  •  

    测试

    select * from dbo.fn_split('aB,bB,cB,dB',',',1)

    结果

     

     

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐