如何在SQL中的行中提取csv分隔值?

时间:2015-05-24 06:52:17

标签: sql tsql sql-server-2014

我想知道如何在SQL中提取以下信息,例如:

ID Hobbies
1  Swimming; Dancing; Zumba
2  Swimming; Eating; Baseball
3  Hockey; Polo; Fishing

现在我只想要按照字母顺序排列第一个字母最少的运动。在这种情况下,它将是:

ID Hobbies (min)
1  Dancing
2  Baseball
3  Fishing

更普遍的问题是,是否有可能“恢复”XML行连接的过程?

PS:我目前正在使用SQL Server 2014,业余爱好没有排序。

创建测试表的代码

CREATE TABLE TestTable
    ([ID] INT, [Hobbies] varchar(MAX))
;

INSERT INTO TestTable
    ([ID], [Hobbies])
VALUES
    (1, 'Swimming; Dancing; Zumba'),
    (2, 'Swimming; Eating; Baseball'),
    (3, 'Hockey; Polo; Fishing')
;

谢谢!

1 个答案:

答案 0 :(得分:0)

这将扩展您的列表。然后,您可以轻松地添加一个组和分钟(爱好),或者在此表单中轻松地添加您喜欢的任何组合。

WITH CTE_XML
AS
(
    SELECT  ID,
            xml_hobbies = CAST('<t>' + REPLACE(hobbies,'; ','</t><t>') + '</t>' AS XML)
    FROM testTable
)

SELECT  ID,
        hobby = t.value('.','VARCHAR(MAX)')
FROM CTE_XML
CROSS APPLY xml_hobbies.nodes('t') CA(t)

结果:

ID          hobby
----------- -------------
1           Swimming
1           Dancing
1           Zumba
2           Swimming
2           Eating
2           Baseball
3           Hockey
3           Polo
3           Fishing