CREATE FUNCTION [dbo].[StrSplit](@str NVARCHAR(MAX),--字符串@split VARCHAR(10),--截取符号@num INT --返回第几条数据,不填则全部返回)RETURNS @Temp TABLE (List VARCHAR(100)) ASBEGIN--用法----截取的数据全部返回--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=1DECLARE @j INT=1WHILE(@i>0)BEGIN SET @i=CHARINDEX(@split,@str,@j)IF(@i>0)BEGININSERT @t(List) VALUES(SUBSTRING(@str,@j,@i-@j))END ELSE BEGININSERT @t(List) VALUES(SUBSTRING(@str,@j,LEN(@str)-@j+1))ENDSET @j = @i + 1 END--是否指定第几次数据--为空则全部返回,不为空则返回指定数据IF ISNULL(@num,'')=''BEGIN --返回全部数据INSERT INTO @TempSELECT List FROM @t END ELSE BEGIN --返回指定数据INSERT INTO @TempSELECT List FROM @t WHERE id=@num END RETURNEND
例:根据'/'拆分'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