将管道衬里的字符串拆分为行 - 在 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

最新更新