Here is a solution I came up with using CTE to recursively loop through a table of values ββand split them into a new CHAR(13) line CHAR(13) , and then use PIVOT to display the results. You can expand this to additional columns (over 5) by simply adding them to the PIVOT .
DECLARE @Table AS TABLE(ID int, SomeText VARCHAR(MAX)) INSERT INTO @Table VALUES(1, '88 Park View Hemmingdale London') INSERT INTO @Table VALUES(2, '100 Main Street Hemmingdale London') INSERT INTO @Table VALUES(3, '123 6th Street Appt. B Hemmingdale London') ;WITH SplitValues (ID, OriginalValue, SplitValue, Level) AS ( SELECT ID, SomeText, CAST('' AS VARCHAR(MAX)), 0 FROM @Table UNION ALL SELECT ID , SUBSTRING(OriginalValue, CASE WHEN CHARINDEX(CHAR(13), OriginalValue) = 0 THEN LEN(OriginalValue) + 1 ELSE CHARINDEX(CHAR(13), OriginalValue) + 2 END, LEN(OriginalValue)) , SUBSTRING(OriginalValue, 0, CASE WHEN CHARINDEX(CHAR(13), OriginalValue) = 0 THEN LEN(OriginalValue) + 1 ELSE CHARINDEX(CHAR(13), OriginalValue) END) , Level + 1 FROM SplitValues WHERE LEN(SplitValues.OriginalValue) > 0 ) SELECT ID, [1] AS Level1, [2] AS Level2, [3] AS Level3, [4] AS Level4, [5] AS Level5 FROM ( SELECT ID, Level, SplitValue FROM SplitValues WHERE Level > 0 ) AS p PIVOT (MAX(SplitValue) FOR Level IN ([1], [2], [3], [4], [5])) AS pvt
Results:
ID Level1 Level2 Level3 Level4 Level5 ----------- -------------------- -------------------- -------------------- -------------------- -------------------- 1 88 Park View Hemmingdale London NULL NULL 2 100 Main Street Hemmingdale London NULL NULL 3 123 6th Street Appt. B Hemmingdale London NULL
source share