sqlsever创建分隔函数(先按分号分割在按逗号分割成一张表)

--"1,2,3;4,5,6"  逗号分隔的数字分别代表不同的id
--//先按分号分割在按逗号分割成一张表
create function [dbo].[split](@t varchar(8000),@s1 varchar(10),@s2 varchar(10))
returns @retab table(UserId int,RoleId int,ServerId int)
as 
begin 
    declare @i int,@j int,@k int;
    
    set @k=1
    while(1=1)
    begin
	    --分号位置
        select @i = charindex(@s1,@t);
        if(@i>0)
        begin
		--逗号位置
            select @j = charindex(@s2,@t);
            insert @retab select substring(@t,1,@j-1),SUBSTRING(@t,@j+1,CHARINDEX(',',@t,CHARINDEX(',',@t)+1)-@j-1),substring(@t,CHARINDEX(',',@t,CHARINDEX(',',@t)+1)+1,@i-CHARINDEX(',',@t,CHARINDEX(',',@t)+1)-1);
            select @t = substring(@t,@i+1,len(@t))
        end
        else
        begin
            select @j = charindex(@s2,@t);
            insert @retab select substring(@t,1,@j-1),SUBSTRING(@t,@j+1,CHARINDEX(',',@t,CHARINDEX(',',@t)+1)-@j-1),substring(@t,CHARINDEX(',',@t,CHARINDEX(',',@t)+1)+1,len(@t));
            break;
        end
        set @k=@k+1
    end
    return
end  

go
select * from [dbo].[split]('1,2,3;4,5,6',';',',');

运行结果如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值