MS SQL Server获取逗号之间的值

iho*_*rko 6 sql t-sql sql-server sql-server-2008

我在Table1中有一个列,其中的字符串由commma分隔:

Id Val
1  ,4
2  ,3,1,0
3  NULL
4  ,5,2
Run Code Online (Sandbox Code Playgroud)

例如,是否有一种简单的方法可以拆分并从该列中获取任何值

SELECT值(1)FROM Table1应该得到

Id Val
1  4
2  3
3  NULL
4  5
Run Code Online (Sandbox Code Playgroud)

SELECT Value(2)FROM Table1应该得到

Id Val
1  NULL
2  1
3  NULL
4  2
Run Code Online (Sandbox Code Playgroud)

谢谢!

Sou*_*kai 1

以下是结合使用 CTE 并将 CSV 转换为 XML 的示例:

DECLARE @Test TABLE (
    CsvData VARCHAR(10)
);

INSERT INTO @Test (CsvData)
VALUES
    ('1,2,3'),
    (',4,5,7'),
    (NULL),
    (',3,');

WITH XmlData AS (
    SELECT CONVERT(XML, '<val>' + REPLACE(CsvData, ',', '</val><val>') + '</val>') [CsvXml]
    FROM @Test
)
SELECT xd.CsvXml.value('val[2]', 'VARCHAR(10)')
FROM XmlData xd;
Run Code Online (Sandbox Code Playgroud)

这将输出:

2
4
NULL
3
Run Code Online (Sandbox Code Playgroud)

要显示的列由 XPath 查询控制。在这种情况下,val[2]

这里的主要优点是不需要用户定义的函数。