在一列中拆分分隔字符串并保持其他列不变

Split delimited string in one column and keep other column intact

我的table数据如下

x------x--------------------x
| Key  |        Ids         |
x------x--------------------x
|  1   |    23,34,45,56,78  |
|  2   |    56,76,45,7,98   |
x------x--------------------x

我希望输出像

x---------------x
| Key  |   Ids  |
x------|--------x
|  1   |   23   |
|  1   |   34   |
|  1   |   45   |
|  1   |   56   |
|  1   |   78   | 
|  2   |   56   |
|  2   |   76   |
|  2   |   45   |
|  2   |   7    |
|  2   |   98   |
x------x--------x

我知道使用dbo.split()但不知道组合和显示。请指教

您可以使用 CROSS APPLY 来执行此操作。这是一个示例,但您需要根据 Split 函数调整列名:

SELECT a.Key, b.Data from YourTable a
CROSS APPLY dbo.Split(a.Ids, ',') b

你可以不用 Dbo.Split

这是你的样本table

SELECT * INTO #TEMP 
FROM
(
    SELECT 1 [KEY],'23,34,45,56,78' Ids
    UNION ALL
    SELECT 2,'56,76,45,7,98'
)TAB

这里是查询

SELECT [KEY],PARSENAME(REPLACE(Split.a.value('.', 'VARCHAR(100)'),'-','.'),1) 'Ids' 
FROM  
(
     SELECT [KEY], CAST ('<M>' + REPLACE(Ids, ',', '</M><M>') + '</M>' AS XML) AS Data 
     FROM #TEMP     
) AS A 
CROSS APPLY Data.nodes ('/M') AS Split(a)

现在如果你想使用 dbo.Split 本身你可以使用上面的代码。

SELECT a.[Key], b.items
FROM TEMP a
CROSS APPLY dbo.Split(a.Ids, ',') b