Try this (assuming SQL Server 2005 +)
DECLARE @t TABLE(ColumnValue VARCHAR(50)) INSERT INTO @t(ColumnValue) SELECT 'josh,Reg01,False,a0-t0,22/09/2010' INSERT INTO @t(ColumnValue) SELECT 'mango,apple,bannana,grapes' INSERT INTO @t(ColumnValue) SELECT 'stackoverflow' SELECT ThirdValue = splitdata FROM( SELECT Rn = ROW_NUMBER() OVER(PARTITION BY ColumnValue ORDER BY (SELECT 1)) ,X.ColumnValue ,Y.splitdata FROM ( SELECT *, CAST('<X>'+REPLACE(F.ColumnValue,',','</X><X>')+'</X>' AS XML) AS xmlfilter FROM @t F )X CROSS APPLY ( SELECT fdata.D.value('.','varchar(50)') AS splitdata FROM X.xmlfilter.nodes('X') as fdata(D) ) Y )X WHERE X.Rn = 3
//Result
Thirdvalue
False bannana
Also, it is not clear from your question which version of SQL Server you are using. If you are using SQL SERVER 2000, you can use the approach below.
Step 1. Create a table of numbers
CREATE TABLE dbo.Numbers ( N INT NOT NULL PRIMARY KEY ); GO DECLARE @rows AS INT; SET @rows = 1; INSERT INTO dbo.Numbers VALUES(1); WHILE(@rows <= 10000) BEGIN INSERT INTO dbo.Numbers SELECT N + @rows FROM dbo.Numbers; SET @rows = @rows * 2; END
Step 2. Apply the request below
DECLARE @t TABLE(ColumnValue VARCHAR(50)) INSERT INTO @t(ColumnValue) SELECT 'josh,Reg01,False,a0-t0,22/09/2010' INSERT INTO @t(ColumnValue) SELECT 'mango,apple,bannana,grapes' INSERT INTO @t(ColumnValue) SELECT 'stackoverflow'
- Result
Thirdvalue
False bannana
You can also use Master..spt_Values ββfor your number table
DECLARE @t TABLE(ColumnValue VARCHAR(50)) INSERT INTO @t(ColumnValue) SELECT 'josh,Reg01,False,a0-t0,22/09/2010' INSERT INTO @t(ColumnValue) SELECT 'mango,apple,bannana,grapes' INSERT INTO @t(ColumnValue) SELECT 'stackoverflow'
You can read about it from
1) What is the purpose of the master..spt_values ββsystem table table and what are the values ββof its values?
2) Why (and how) to split columns using master..spt_values?