如何提取以分号分隔的数据

时间:2019-07-11 07:07:16

标签: sql-server csv substring

让我们说我在SQLServer中有一个名为Tasks的表。它包含一些任务,并指派了人员。工人在一列中。它们之间用分号隔开。

ID  Workers
1   John Newman; Troy Batchelor; Mike Smith
2   Chris Portman
3   Sara Oldman; Greg House

我需要将工作人员从下面的列中分离出来

结果:

ID  Worker
1   John Newman
1   Troy Batchelor
1   Mike Smith
2   Chris Portman
3   Sara Oldman
3   Greg House

我不知道该怎么办。 我必须使用某些过程还是简单的查询就足够了?

2 个答案:

答案 0 :(得分:2)

我不使用任何函数或存储过程即可解决您的问题

SELECT ID,Workers FROM tblSemiColon


SELECT ID,
LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS Workers
FROM
(
SELECT ID,CAST('<XMLRoot><RowData>' + REPLACE(Workers,';','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
FROM   tblSemiColon
)t
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)

enter image description here

这将适用于所有版本的sql server。.我已经对其进行了测试。...

您可以减小varchar长度的大小。

答案 1 :(得分:0)

如果您使用的是SQL Server 2016或更高版本,则可以使用STRING_SPLIT函数

SELECT id,  value  
FROM Tasks
    CROSS APPLY STRING_SPLIT(Workers, ';')