将两个分隔符的字符串拆分为两列

Day*_*ker 5 sql sql-server

我有一个字符串值,其数值由逗号分隔,然后由管道分隔.我想把它们分成一个有两列的表.我可以将字符串拆分一个分隔符,但遗憾的是找不到拆分方法.请帮忙.

DECLARE @list NVARCHAR(MAX) = '1,101|2,202|3,303';
Run Code Online (Sandbox Code Playgroud)

结果应如下所示.

1   101
2   202
3   303
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Jas*_*ong 1

如果您使用的是 SQL Server 2016 或 Azure,则可以访问新的SPLIT_STRING函数。如果不是,我建议使用 Jeff Moden 的 DelimitedSplit8K 函数,该函数被广泛认为是最快、最有效的基于 SQL 的字符串拆分器...

DECLARE @list NVARCHAR(MAX) = '1,101|2,202|3,303';

SELECT 
    Col1 = LEFT(dsk.Item, sl.SplitLocation - 1),
    Col2 = SUBSTRING(dsk.Item, sl.SplitLocation + 1, LEN(dsk.Item))
FROM 
    dbo.DelimitedSplit8K(@list, '|') dsk    -- code for DelimitedSplit8K can be found here... http://www.sqlservercentral.com/articles/Tally+Table/72993/
    CROSS APPLY ( VALUES (ISNULL(NULLIF(CHARINDEX(',', dsk.Item, 1), 0), 1)) ) sl (SplitLocation);
Run Code Online (Sandbox Code Playgroud)