I want to extract specific strings separated by a comma and parse across the specific columns in SQL server 2008. The table structure in SQL server is as follows:
With the help of a Split function:
CREATE FUNCTION [dbo].[SplitStrings]
(
@List VARCHAR(MAX),
@Delimiter CHAR(1)
)
RETURNS TABLE
AS
RETURN ( SELECT Item FROM ( SELECT Item = x.i.value('(./text())[1]', 'varchar(max)')
FROM ( SELECT [XML] = CONVERT(XML, '' + REPLACE(@List, @Delimiter, '')
+ '').query('.') ) AS a CROSS APPLY [XML].nodes('i') AS x(i)
) AS y WHERE Item IS NOT NULL
);
GO
You can do it this way:
;WITH x AS
(
SELECT s.*, f.Item
FROM #samp AS s
CROSS APPLY dbo.SplitStrings(s.COMMASEPA, ',') AS f
), p AS
(
SELECT x.COMMASEPA,
X = MAX(CASE WHEN x.Item LIKE 'X=%' THEN x.Item END),
Y = MAX(CASE WHEN x.Item LIKE 'Y=%' THEN x.Item END),
Z = MAX(CASE WHEN x.Item LIKE 'Z=%' THEN x.Item END),
A = MAX(CASE WHEN x.Item LIKE 'A=%' THEN x.Item END),
B = MAX(CASE WHEN x.Item LIKE 'B=%' THEN x.Item END),
C = MAX(CASE WHEN x.Item LIKE 'C=%' THEN x.Item END),
D = MAX(CASE WHEN x.Item LIKE 'D=%' THEN x.Item END)
FROM x GROUP BY x.COMMASEPA
)
UPDATE s SET X = p.X, Y = p.Y, Z = p.Z,
A = p.A, B = p.B, C = p.C, D = p.D
FROM #samp AS s INNER JOIN p
ON p.COMMASEPA = s.COMMASEPA;