将管道内衬字符串拆分为行 - 在 SQL 服务器中也拆分空值

Split pipe lined string into Rows - Split the empty values also in SQL Server

我有一个如下所示的管道内衬字符串:

'1|Content|2017-02-11|Guest|Gold|||||1903'

我想将字符串值拆分为行。我通过网上冲浪找到了很多建议。大多数人建议函数 dbo.Split.

当我尝试使用该函数拆分我的字符串时:

SELECT ROW_NUMBER() OVER(ORDER BY(SELECT NULL))RN, Items 
FROM dbo.Split('1|Content|2017-02-11|Guest|Gold|||||1903','|') 

结果如下:

RN  Items
1   1
2   Content
3   2017-02-11
4   Guest
5   Gold
6   1903

它跳过所有空值,只给出持有行的值。但在我的例子中,如果有任何值是空的,那么我希望它像下面这样:

RN  Items
1   1
2   Content
3   2017-02-11
4   Guest
5   Gold
6   
7
8
9
10  1903

也就是说,我想要空值作为“ ”。我试过了,但我无法得到它。请帮我得到这个。谢谢。

这里的简单方法是使用 XML 方法将您的管道内衬字符串数据转换为行:

DECLARE @DATA NVARCHAR(MAX);

SET @DATA = '1|Content|2017-02-11|Guest|Gold|||||1903';

SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) RN,
       split.a.value('.', 'VARCHAR(MAX)') [Items]
FROM
(
    SELECT CAST('<X>'+REPLACE(@DATA, '|', '</X><X>')+'</X>' AS XML) AS String
) A
CROSS APPLY String.nodes('/X') AS split(a);

结果:

RN  Items
1   1
2   Content
3   2017-02-11
4   Guest
5   Gold
6   
7
8
9
10  1903