[英]Split comma separated string table row into separate rows using TSQL
假設我有一個返回以下內容的查詢
ID SomeValue
1 a,b,c,d
2 e,f,g
我想返回如下:
ID SomeValue
1 a
1 b
1 c
1 d
2 e
2 f
2 g
我已經有一個UDF調用Split,它將接受一個字符串和一個分隔符,並將其作為一個名為[Value]的列的表返回。 鑒於此,SQL看起來如何實現這一目標?
或者,您可以像這樣使用XML:
DECLARE @yourTable TABLE(ID INT,SomeValue VARCHAR(25));
INSERT INTO @yourTable
VALUES (1,'a,b,c,d'),
(2,'e,f,g');
WITH CTE
AS
(
SELECT ID,
[xml_val] = CAST('<t>' + REPLACE(SomeValue,',','</t><t>') + '</t>' AS XML)
FROM @yourTable
)
SELECT ID,
[SomeValue] = col.value('.','VARCHAR(100)')
FROM CTE
CROSS APPLY [xml_val].nodes('/t') CA(col)
你使用cross apply
。 像這樣的東西:
select t.id, s.val as SomeValue
from table t cross apply
dbo.split(SomeValue, ',') as s(val);
我知道這是一篇較舊的帖子,但我想添加我的解決方案,以便將來能夠找到它。 我不得不對Stephan的解決方案稍作調整,以考慮不包含分隔符的值:
DECLARE @yourTable TABLE(ID INT,SomeValue VARCHAR(25));
INSERT INTO @yourTable
VALUES (1,'a,b,c,d'),
(2,'e'),
(3,'f'),
(4,'g,h,i');
WITH CTE
AS
(
SELECT ID,
[xml_val] = CAST('<t>' +
CASE WHEN CHARINDEX(',', SomeValue) > 0
THEN REPLACE(SomeValue,',','</t><t>')
ELSE SomeValue
END + '</t>' AS XML)
FROM @yourTable
)
SELECT ID,
[SomeValue] = col.value('.','VARCHAR(100)')
FROM CTE
CROSS APPLY [xml_val].nodes('/t') CA(col)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.