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        



阅读更多
个人分类: 数据库
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭