create table #csv(csvtext varchar(8000) not null)
insert #csv select 'a,b,c,d,e,f,g' union select '1,2,3,4,5,6'
select
dbo.fnGetCsvPart(csvtext,0,default) as csv_pos0
,dbo.fnGetCsvPart(csvtext,2,default) as csv_pos2
,dbo.fnGetCsvPart(csvtext,2,1) as all_csv_from_pos2
from #csv
csv_pos0 csv_pos2 all_csv_from_pos2
------------------------------ ------------------------------ ------------------------------
1 3 3,4,5,6
a c c,d,e,f,g
create function dbo.fnGetCsvPart(@csv varchar(8000),@index tinyint, @last bit = 0)
returns varchar(4000)
as
/* function to retrieve 0 based "column" from csv string */
begin
declare @i int; set @i = 0
while 1 = 1
begin
if @index = 0
begin
if @last = 1 or charindex(',',@csv,@i+1) = 0
return substring(@csv,@i+1,len(@csv)-@i+1)
else
return substring(@csv,@i+1,charindex(',',@csv,@i+1)-@i-1)
end
select @index = @index-1, @i = charindex(',',@csv,@i+1)
if @i = 0 break
end
return null
end
GO
rockmoose