SQL - 将具有多个分隔符的字符串拆分为多个行和列

时间:2018-04-12 10:38:15

标签: sql sql-server sqlite

我正在尝试使用以下格式在SQL中拆分字符串: 'John, Mark, Peter|23, 32, 45'

我们的想法是在第一列中包含所有名称,在第二列中包含年龄。

enter image description here

查询应该是“动态的”,字符串可以有多个记录,具体取决于用户条目。

有没有人知道怎么做,如果可能没有SQL函数?我尝试过交叉申请方法,但我无法使其发挥作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

此解决方案使用Jeff Moden的DelimitedSplit8k。为什么?因为他的解决方案提供了项目的序数位置。序数位置许多其他功能的东西,包括微软自己的STRING_SPLIT,没有提供。让这个正常工作将是非常重要的。

一旦你有了,解决方案变得相当简单:

DECLARE @NameAges varchar(8000) = 'John, Mark, Peter|23, 32, 45';

WITH Splits AS (
    SELECT S1.ItemNumber AS PipeNumber,
           S2.ItemNumber AS CommaNumber,
           S2.Item
    FROM dbo.DelimitedSplit8K (REPLACE(@NameAges,' ',''), '|') S1 --As you have spaces between the delimiters I've removed these. Be CAREFUL with that
         CROSS APPLY DelimitedSplit8K (S1.item, ',') S2)
SELECT S1.Item AS [Name], 
       S2.Item AS Age
FROM Splits S1
     JOIN Splits S2 ON S1.CommaNumber = S2.CommaNumber
                   AND S2.PipeNumber = 2
WHERE S1.PipeNumber = 1;