If we have one series with comma separate(any Delimiter) value and we want split into in rows, I have create function for that:
IF OBJECT_ID('TF_SplitSeriesIntoRow','TF') IS NOT NULL
BEGIN
DROP FUNCTION dbo.TF_SplitSeriesIntoRow
END
GO
CREATE FUNCTION dbo.TF_SplitSeriesIntoRow (@Series1 VARCHAR(MAX), @Delimiter CHAR(1),@WordNo INT)
RETURNS @SplitValues TABLE (ID INT IDENTITY,Value1 VARCHAR(MAX))
AS
BEGIN
DECLARE @Value1 VARCHAR(MAX)
DECLARE @Pos INT
DECLARE @SplitValues1 TABLE (ID INT IDENTITY,Value1 VARCHAR(MAX))
WHILE CHARINDEX(@Delimiter, @Series1) > 0
BEGIN
SET @Pos = CHARINDEX(@Delimiter, @Series1)
SET @Value1 = SUBSTRING(@Series1, 1, @Pos - 1)
SET @Series1 = SUBSTRING(@Series1, @Pos + 1, LEN(@Series1) - @Pos)
INSERT INTO @SplitValues1 (Value1)
VALUES (@Value1)
END
INSERT INTO @SplitValues1 (Value1)
VALUES (@Series1)
DECLARE @ID INT
IF @WordNo = 0
SET @ID = NULL
ELSE
SET @ID = @WordNo
INSERT INTO @SplitValues (Value1)
SELECT A.Value1 FROM @SplitValues1 A WHERE (@ID IS NULL OR A.ID = @ID)
RETURN
END
GO
SELECT * FROM dbo.TF_SplitSeriesIntoRow('John Doe Smith', ' ',1);
SELECT * FROM dbo.TF_SplitSeriesIntoRow('apple,orange,banana', ',',3);
SELECT * FROM dbo.TF_SplitSeriesIntoRow('apple,orange,banana', ',',0);
