【问题标题】:Split pipe lined string into Rows - Split the empty values also in SQL Server将管道内衬字符串拆分为行 - 在 SQL Server 中也拆分空值
【发布时间】:2017-11-03 11:25:36
【问题描述】:

我有一个像下面这样的管道内衬字符串:

'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

这意味着,我希望空的 vales 为 ' '。我试过了,我不能得到它。请帮我得到这个。谢谢。

【问题讨论】:

    标签: sql sql-server string split pipeline


    【解决方案1】:

    简单的方法是在这里使用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
    

    【讨论】:

    • 哦!太奇妙了。感谢您的支持。
    猜你喜欢
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多