Splitting delimited data to columns - Set based approach

Published 11 September 08 12:58 PM | Madhivanan 
In this post splitting-csv-to-columns I showed how to split delimited data into multiple columns

Simon in his post Set-based-splitting-of-delimited-strings-to-columns showed how to use that in a set based approach which would work on a set of data.In his approach he has limited it to maximum of four columns
I have modified his approach to work for any number of columns

CREATE TABLE #test(id int, data varchar(100))

INSERT INTO #test VALUES (1,'This,is,a,test,string')
INSERT INTO #test VALUES (2,'See,if,it,can,be,split,into,many,columns')

DECLARE @pivot varchar(8000)
DECLARE @select varchar(8000)

SELECT 
        @pivot
=coalesce(@pivot+',','')+'[col'+cast(number+1 as varchar(10))+']'
FROM 
        master
..spt_values where type='p' and 
        number
<=(SELECT max(len(data)-len(replace(data,',',''))) FROM #test)

SELECT
    @select
='
        select p.*
        from (
        select 
            id,substring(data, start+2, endPos-Start-2) as token,
            ''col''+cast(row_number() over(partition by id order by start) as varchar(10)) as n
        from (
            select 
                id, data, n as start, charindex('','',data,n+2) endPos
                from (select number as n from master..spt_values where type=''p'') num
                cross join 
                (
                    select 
                        id, '','' + data +'','' as data 
                    from 
                        #test
                ) m
            where n < len(data)-1
            and substring(data,n+1,1) = '','') as data
        ) pvt
        Pivot ( max(token)for n in ('
+@pivot+'))p'

EXEC(@select)

DROP TABLE #test

Also Refer
csv to multiple columns
Dynamic pivot in sql server-2005

Filed under: , , , ,

Comments

# SQL Server Transact-SQL (SSQA.net) : Splitting delimited data to columns - Set based approach said on September 11, 2008 8:52 AM:

PingBack from http://sqlserver-qa.net/blogs/t-sql/archive/2008/09/11/4872.aspx

# Other SQL Server Blogs around the Web said on September 11, 2008 9:42 AM:

In this post splitting-csv-to-columns I showed how to split delimited data into multiple columns Simon

Anonymous comments are disabled

Search

Go

This Blog

«September 2008»
SMTWTFS
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

Syndication