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