Sql Server 中的字符串拆分函数

我们在查询数据库的数据时,有时会遇到要拆分某字段字符串为多个值的情况,如:表tblTest 中存在字段c1值为‘aa,bb,cc’的记录,要分别获取aa,bb,cc的值可以参考下面的函数.


CREATE FUNCTION split(@Long_str varchar(8000),@split_str varchar(100))    
RETURNS  @tmp TABLE(        
    ID int IDENTITY PRIMARY KEY,      
    short_str varchar(8000)    
)    
AS   
BEGIN   
    DECLARE @long_str_Tmp varchar(8000),
   @short_str varchar(8000),
   @split_str_length int   
 
    SET @split_str_length = LEN(@split_str)    
 
    IF CHARINDEX(@split_str,@Long_str)=1
         SET @long_str_Tmp=SUBSTRING(@Long_str,
     @split_str_length+1,
     LEN(@Long_str)-@split_str_length)
 
    ELSE
         SET @long_str_Tmp=@Long_str
 
    IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1    
        SET @long_str_Tmp=@long_str_Tmp+@split_str    
    ELSE   
        SET @long_str_Tmp=@long_str_Tmp    
 
    WHILE CHARINDEX(@split_str,@long_str_Tmp)>0    
        BEGIN   
            SET @short_str=SUBSTRING(@long_str_Tmp,1,
     CHARINDEX(@split_str,@long_str_Tmp)-1)    
            DECLARE @long_str_Tmp_LEN INT,@split_str_Position_END int   
            SET @long_str_Tmp_LEN = LEN(@long_str_Tmp)    
            SET @split_str_Position_END = LEN(@short_str)+@split_str_length    
            SET @long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,
     @long_str_Tmp_LEN-@split_str_Position_END))
            IF @short_str<>'' INSERT INTO @tmp SELECT @short_str    
        END   
    RETURN     
END


测试如下:

select * from split('aa,bb,cc', ',')


测试结果为:

ID  short_str  
--  ---------  
1   aa         
2   bb         
3   cc        



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值