2013-07-06 25 views
0

我有變量輸入SQL字符串爲多列

@inputData varchar(Max) 

e.g:

Victor:2;John:22;Jo:100 

哪能變量分成兩列?

Col1 Col2 
---------- 
Victor 2 
John  22 
Jo  100 

回答

0

以下是腳本,它給出了來自單個字符串值的多個列和行。

declare @inputData varchar(Max) = 'Victor:2;John:22;Jo:100' + ';' 

;with row(c1,c2) 
as 
(
SELECT LEFT 
     (@inputData 
     , CHARINDEX(';', @inputData, 0) - 1 
     ) col1 

     , SUBSTRING 
     (@inputData 
     , CHARINDEX(';', @inputData, 0) + 1 
     , LEN(@inputData) 
     ) col2 

UNION ALL 

SELECT LEFT 
     (c2 
     , CHARINDEX(';', c2, 0) - 1 
     ) col1 

     , SUBSTRING 
     (c2 
     , CHARINDEX(';', c2, 0) + 1 
     , LEN(c2) 
     ) col2 
FROM row 
WHERE CHARINDEX(';', c2, 0) >0 
) 

select LEFT(C1, CHARINDEX(':', c1, 0) - 1) col1, SUBSTRING(c1 , CHARINDEX(':', c1, 0) + 1, LEN(c1)) col2 from row 

輸出:

col1 col2 
Victor 2 
John 22 
Jo 100 
+0

感謝一個完美的解決方案!謝謝!! – priya

+0

如果兩個列值的長度相同,它就可以工作。我有條件列值不會有相同的長度。我已經編輯了我的問題。 – priya

+0

看到我編輯的帖子。 –

0

可能不是一個非常好的/有效的解決方案,並且通常基於您的示例;你可以試試下面的:

create table tab1(col varchar(100)) 

insert into tab1 values ('key1:val1;key2:val2;key3:valu3') 

查詢:

select SUBSTRING((SUBSTRING((left(col,CHARINDEX(';',Col))),0, 
charindex(';',col))),0,charindex(':',col)) as Name, 

SUBSTRING((SUBSTRING((left(col,CHARINDEX(';',Col))),0, 
charindex(';',col))),(charindex(':',col)+1),4) as Age 
from tab1 

union 

select SUBSTRING((SUBSTRING(right(col,CHARINDEX(';',Col)),0, 
charindex(';',col))) ,0,charindex(':',col)) as Name, 

SUBSTRING((SUBSTRING(right(col,CHARINDEX(';',Col)),0, 
charindex(';',col))),(charindex(':',col)+1),4) as Age 
from tab1 

union 

select SUBSTRING((SUBSTRING(substring(col,(CHARINDEX(';',Col) + 
1),10),0,charindex(';',col))),0,charindex(':',col)) as Name, 

SUBSTRING((SUBSTRING(substring(col,(CHARINDEX(';',Col) + 1),10),0, 
charindex(';',col))),(charindex(':',col)+1),4) as Age 
from tab1 

實現,這將是UDF(用戶定義函數)的最佳方式。這只是一個 的例子,你可能想從這裏進一步探討。

+0

是要實現它作爲UDF和SP使用它。謝謝 – priya

相關問題