• SqlServer2005,拆分一组按特定分隔符排列字符串函数(表值函数)


    今天做项目时有需要用到SqlServer拆分字串的函数,懒得自己写就在园子里找了一下,找到这个,后来测试时发现两个问题:最后一组值取不到,连续的两个分隔符返回空值或0。很显然这个函数不能用。拆分的原理是:从第一个字符或分隔符的下一个字符开始,查找下一个分隔符,然后取出其中的值并插入到一个临时表,最后返回这个临时表。这时候有2个需要注意的地方:需拆分字串的最后一个字符并不一定是分隔符,所以需要判断;两个分隔符之间的值为空时需要跳过。
    修改后的代码如下:
    CREATE FUNCTION fn_Splitor (
        
    @array nvarchar(4000),
        
    @separator char=','
    )
    RETURNS @tbls TABLE (Item int)
    as
    BEGIN
        
    if(@array is null or len(ltrim(rtrim(@array)))=0)
            
    return;

        
    DECLARE @item nvarchar(4000)
        
    DECLARE @cur  int
        
    DECLARE @pos int
        
    DECLARE @len  int    --字符串的长度
        set @cur=1
        
    SET @len=len(@array)
        
    WHILE (@cur<=@len)
        
    BEGIN
            
    set @pos=CharIndex(@separator,@array,@cur)
            
    -- 如果有连续两个分隔符@separator,则跳过此次循环
            if(@pos=@cur)
            
    begin
                
    set @cur=@cur+1
                
    continue
            
    end
            
    if(@pos>0)
           
        begin
                   
    set @item=SUBSTRING(@array,@cur,@pos-@cur)
                    set @cur=@pos+1
               
    end
            
    else
               
    begin
                   
    -- 循环已到了@array的末尾,在末尾并不包含分隔符@separator。
                    set @item=SUBSTRING(@array,@cur,@len-@cur+1)
                   
    set @cur=@len+1
               
    end
            INSERT INTO @tbls VALUES(@item)
        
    END
        
    RETURN
    end
    GO

  • 相关阅读:
    java连接常见数据库的连接字符串
    一个用来自动管理大容量表的Sql脚本
    Ibatis2.0使用说明(一)——入门实例篇
    态度决定你的人生高度
    jboss配置入门(二) -JBOSS3.2.3/3.2.6部署及配置修改
    如何在一个工程里面实现不同的功能打入不同的日志文件中【log4net】
    Xsl实践总结(一)
    Xsl实践总结(三)-介绍一款开发XSL不错的IDE(Stylus)
    Xsl实践总结(二)
    教你节省时间 让你个人效率翻三倍
  • 原文地址:https://www.cnblogs.com/qingyang/p/Sql2005_fn_Splitor.html
Copyright © 2020-2023  润新知