Hi, Actually ur thread was very nice. But i have a solution by using XML in Server. u might be use .
Solution
Let's say for example there is a string 'A,B,C,D,E' and I want to split it based on the delimiter ','.
The first step would be to convert that string into XML and replace the delimiter with some start and end XML tags.
DECLARE @xml as xml,@str as varchar(100),@delimiter as varchar(10)
SET @str='A,B,C,D,E'
SET @delimiter =','
SET @xml = cast(('<X>'+replace(@str,@delimiter ,'</X><X>')+'</X>') as xml)
SELECT @xml
Here is what this looks like after the delimiter ',' is replaced by tags. When you see the output after converting the string into XML, you will be able to see the string as shown in the image below:
Once the string is converted into XML you can easily query that using XQuery
DECLARE @xml as xml,@str as varchar(100),@delimiter as varchar(10)
SET @str='A,B,C,D,E'
SET @delimiter =','
SET @xml = cast(('<X>'+replace(@str,@delimiter ,'</X><X>')+'</X>') as xml)
SELECT N.value('.', 'varchar(10)') as value FROM @xml.nodes('X') as T(N)
Now, say I have a table that has an ID column and comma separated string data as shown below.
DECLARE @t TABLE( ID INT IDENTITY, data VARCHAR(50))
INSERT INTO @t(data) SELECT 'AA,AB,AC,AD'
INSERT INTO @t(data) SELECT 'BA,BB,BC'
SELECT * FROM @t[/CODE]
I can use the method shown above to split the string.
DECLARE @t TABLE( ID INT IDENTITY, data VARCHAR(50))
INSERT INTO @t(data) SELECT 'AA,AB,AC,AD'
INSERT INTO @t(data) SELECT 'BA,BB,BC'
SELECT F1.id,
F1.data,
O.splitdata
FROM
(
SELECT *,
cast('<X>'+replace(F.data,',','</X><X>')+'</X>' as XML) as xmlfilter from @t F
)F1
CROSS APPLY
(
SELECT fdata.D.value('.','varchar(50)') as splitdata
FROM f1.xmlfilter.nodes('X') as fdata(D)) O