【问题标题】:How to extract data separated by a semicolon如何提取用分号分隔的数据
【发布时间】:2019-07-11 07:07:16
【问题描述】:

假设我在 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

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

【问题讨论】:

标签: sql-server csv substring


【解决方案1】:

我在不使用任何函数或存储过程的情况下解决了您的问题

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)

这将适用于所有版本的 sql server..我已经测试过了....

你可以减小 varchar 长度的大小..

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 2015-06-05
      • 1970-01-01
      • 2019-09-23
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多