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

转载于:https://www.cnblogs.com/qingyang/archive/2007/11/22/Sql2005_fn_Splitor.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值