我有變量輸入SQL字符串爲多列
@inputData varchar(Max)
e.g:
Victor:2;John:22;Jo:100
哪能變量分成兩列?
Col1 Col2
----------
Victor 2
John 22
Jo 100
我有變量輸入SQL字符串爲多列
@inputData varchar(Max)
e.g:
Victor:2;John:22;Jo:100
哪能變量分成兩列?
Col1 Col2
----------
Victor 2
John 22
Jo 100
以下是腳本,它給出了來自單個字符串值的多個列和行。
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
可能不是一個非常好的/有效的解決方案,並且通常基於您的示例;你可以試試下面的:
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(用戶定義函數)的最佳方式。這只是一個 的例子,你可能想從這裏進一步探討。
是要實現它作爲UDF和SP使用它。謝謝 – priya
感謝一個完美的解決方案!謝謝!! – priya
如果兩個列值的長度相同,它就可以工作。我有條件列值不會有相同的長度。我已經編輯了我的問題。 – priya
看到我編輯的帖子。 –