sql根据指定符号拆分字符串表函数

CREATE FUNCTION [dbo].[StrSplit]
(
	@str NVARCHAR(MAX),--字符串
	@split VARCHAR(10),--截取符号
	@num INT           --返回第几条数据,不填则全部返回
)
RETURNS @Temp TABLE 
(
	List VARCHAR(100)
)  
AS
BEGIN
    --用法
	----截取的数据全部返回
	--select *  from StrSplit('1234/123/345','/','')

	----返回指定的数据
	----例如返回第一个/后的数据
	--select *  from StrSplit('1234/123/345','/','2')
 
    DECLARE @t TABLE 
	(
		id INT IDENTITY(1,1),
		List VARCHAR(100)
	) 
    DECLARE @i INT=1
    DECLARE @j INT=1
    WHILE(@i>0)
    BEGIN    
        SET @i=CHARINDEX(@split,@str,@j)
        IF(@i>0)
        BEGIN
            INSERT @t
				(
					List
				) 
			VALUES
				(
					SUBSTRING(@str,@j,@i-@j)
				)
        END   
        ELSE 
		BEGIN
            INSERT @t
				(
					List
				) 
			VALUES
				(
					SUBSTRING(@str,@j,LEN(@str)-@j+1)
				)
        END
        SET @j = @i + 1   
    END
 
	--是否指定第几次数据
	--为空则全部返回,不为空则返回指定数据
	IF ISNULL(@num,'')=''
	BEGIN 
	   --返回全部数据
	   INSERT INTO @Temp
	   SELECT List FROM @t  
	END 
	ELSE 
	BEGIN 
	    --返回指定数据
	    INSERT INTO  @Temp
	    SELECT List FROM @t WHERE id=@num 
	END 
 
    RETURN
END

例:根据'/'拆分'111/222/4333/122'  我要取出'222',或得到拆分后全部数据

DECLARE @Test NVARCHAR(1000)='111/222/4333/122'

SELECT * FROM StrSplit(@Test,'/','2')
--返回结果即为:222

--@Test 为要拆分的变量
--'/' 根据符号'/'进行拆分
--'2' 为要去的第几位数据,如果不写为空的时候,则返回所有参数

--例如
SELECT * FROM StrSplit(@Test,'/','')
--则返回数据为:
--111
--222
--4333
--122

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值