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