我有一个管道衬里字符串,如下所示:
'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