sql server 自定义split函数

drop function [zym_split]
go

create FUNCTION [dbo].[zym_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
	   begin
         SET @long_str_Tmp=@Long_str
		 --print('没有分隔符!')
		 if charindex(',',@Long_str) = 0
		    insert into @tmp select @Long_str

	   end 
    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


GO


select charindex(',','11')

---测试
declare @Long_str varchar(8000)
declare @split_str varchar(100)

set @Long_str = '1,2,3'
set @split_str = ','
declare  @tmp TABLE(        
    ID int IDENTITY PRIMARY KEY,      
    short_str varchar(8000)    
)    

    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
	   begin
         SET @long_str_Tmp=@Long_str
		 --print('没有分隔符!')
		 if charindex(',',@Long_str) = 0
		    insert into @tmp select @Long_str

	   end 
 
    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   
  
	select * from @tmp


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫气东来_999

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值