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

2022-09-16 08:49:41
CREATE FUNCTION [dbo].[StrSplit]
(@str NVARCHAR(MAX),@split VARCHAR(10),@num INT )
RETURNS @Temp TABLE (List VARCHAR(100))  
AS
BEGIN

    DECLARE @t TABLE (id INT IDENTITY(1,1),List VARCHAR(100)) 
    DECLARE @i INT
    DECLARE @j INT
    SET @i=1
    SET @j=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
GO

例:根据'/'拆分'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
  • 作者:独揽日月星辰
  • 原文链接:https://blog.csdn.net/wang_zxcv/article/details/125313108
    更新时间:2022-09-16 08:49:41