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

如何在SQL中提取行中的csv分隔值?,sql,tsql,sql-server-2014,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 Serv

我想知道如何在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')
;

谢谢

这将扩展您的列表。然后,您可以轻松地添加一个组,并在该表单中输入您的爱好或真正做您喜欢做的事情

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)

请查3NF。。。。
ID          hobby
----------- -------------
1           Swimming
1           Dancing
1           Zumba
2           Swimming
2           Eating
2           Baseball
3           Hockey
3           Polo
3           Fishing