将管道内衬字符串拆分为行 - 在 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
我有一个如下所示的管道内衬字符串:
'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