… and before I forget about this one too:
DECLARE @list VARCHAR(500); DECLARE @item VARCHAR(10); SET @list = 'abc, 123/tab/ABC/crlf/XYZ,890'; -- /tab/ and /crlf/ represent actual tabs and cr/lf in data. -- SET @list = REPLACE(REPLACE(@list,'/tab/',CHAR(10)),'/crlf/', CHAR(13) + CHAR(10)); DECLARE @dx INT; DECLARE @delimiter CHAR(1); SELECT @dx = 1 , @delimiter = ',' , @list = REPLACE(REPLACE(REPLACE(@list, CHAR(13) + CHAR(10), @delimiter), CHAR(10), @delimiter), CHAR(9), @delimiter) + @delimiter; WHILE ( @dx < LEN(@list) ) BEGIN SELECT @item = RTRIM(LTRIM(SUBSTRING(@list, @dx, CHARINDEX(@delimiter, @list, @dx) - @dx))) , @dx = CHARINDEX(@delimiter, @list + @delimiter, @dx) + 1; SELECT @item; END;
Edit: The method above is still a valid and useful way to loop through entries in a list, but if you want to use the entries as a set in a query, then reference this entry
2 thoughts on “Looping through a delimited string in SQL.”