Danny_SQL_9876
Starting Member
8 Posts |
Posted - 2012-02-17 : 17:32:29
|
Hi All,I finally managed to get the code .Thank you so much for all your helpfollowing query takes the string and splits it in the same row.--Start--CREATE FUNCTION dbo.fn_nums(@n AS bigint) RETURNS TABLE ASRETURNWITHL0 AS(SELECT 1 AS c UNION ALL SELECT 1),L1 AS(SELECT 1 AS c FROM L0 AS A, L0 AS B),L2 AS(SELECT 1 AS c FROM L1 AS A, L1 AS B),L3 AS(SELECT 1 AS c FROM L2 AS A, L2 AS B),L4 AS(SELECT 1 AS c FROM L3 AS A, L3 AS B),L5 AS(SELECT 1 AS c FROM L4 AS A, L4 AS B),Nums AS(SELECT ROW_NUMBER() OVER(ORDER BY c) AS n FROM L5)SELECT TOP (@n) n AS Number FROM Nums WHERE n <= @n ORDER BY n;GO-- Erland's split functionCREATE FUNCTION dbo.inline_split_me(@param nvarchar(MAX))RETURNS TABLE ASRETURN(SELECTROW_NUMBER() OVER(ORDER BY Number) AS pos,ltrim(rtrim(convert(nvarchar(4000), substring(@param, Number,charindex(N',' COLLATE Slovenian_BIN2, @param + convert(nvarchar(MAX), N','), Number) - Number)))) AS ValueFROM dbo.fn_nums(convert(int, len(@param)))WHERE substring(convert(nvarchar(MAX), N',') + @param, Number, 1) = N',' COLLATE Slovenian_BIN2)GODECLARE @T TABLE (id int NOT NULL IDENTITY(1, 1) UNIQUE,data varchar(max));insert @T values('DEF,KHL,MNO');insert @T values('DEF,KHL,MNO,LKJ,MNJ,BKS');SELECT*FROM@T AS TOUTER APPLYdbo.inline_split_me(T.data) AS SPIVOT(MAX(Value)FOR pos IN ([1], [2], [3], [4], [5], [6])) AS P;GODROP FUNCTION dbo.inline_split_me, dbo.fn_nums;GO--- END----Original source - http://social.msdn.microsoft.com/Forums/en/transactsql/thread/b01291e9-03f7-457c-bcd2-f1241b0aac3fReplacing theinsert @T values('DEF,KHL,MNO');insert @T values('DEF,KHL,MNO,LKJ,MNJ,BKS');with my select statement containing the field i wanted to parse did the magic.hope this helps someone with similar issue. cheers. |
 |
|