sql - 如何根据空格拆分字符串?

标签 sql sql-server tsql

我有这样的示例数据

     DECLARE @Table1 table ([name] varchar(62));

     INSERT INTO @Table1
            ([name])
        VALUES
            ('2018-08-08 23:02:57,731 INFO  [AllRequestInterceptor] CRTST020'),
            ('2018-08-08 23:03:11,687 INFO  [SOAPLoggingHandler] CRTST020'),
            ('2018-08-08 23:03:02,028 ERROR [AJAXController] CRTST003');

我正在尝试根据提供的空间创建 4 列。

     SELECT 
         Reverse(ParseName(Replace(Reverse([name]), ' ', '.'), 1)) As [M1]
         ,Reverse(ParseName(Replace(Reverse([name]), ' ', '.'), 2)) As [M2]
         ,Reverse(ParseName(Replace(Reverse([name]), ' ', '.'), 3)) As [M3]
         ,Reverse(ParseName(Replace(Reverse([name]), ' ', '.'), 4)) As [M4]

      FROM  (Select [name] from @Table1
      ) As [x] 

预期输出:

Date                    Name    Req                     Code
8/8/2018 23:02:57,731   INFO    [AllRequestInterceptor] CRTST020
8/8/2018 23:03:11,687   INFO    [SOAPLoggingHandler]    CRTST020
8/8/2018 23:03:02,028   ERROR   [AJAXController]        CRTST003

最佳答案

试试这个

    DECLARE  @Table1 table ([name] varchar(1000));

    INSERT INTO @Table1
        ([name])
    VALUES
        ('2018-08-08 23:02:57,731 INFO [AllRequestInterceptor] CRTST020'),
        ('2018-08-08 23:03:11,687 INFO [SOAPLoggingHandler] CRTST020'),
        ('2018-08-08 23:03:02,028 ERROR [AJAXController] CRTST003');


    SELECT DISTINCT Split.a.value('/S[1]', 'NVARCHAR(MAX)')+' '+ Split.a.value('/S[2]', 'NVARCHAR(MAX)') [Date],
            Split.a.value('/S[3]', 'NVARCHAR(MAX)') As Name,
            Split.a.value('/S[4]', 'NVARCHAR(MAX)') As Req,
            Split.a.value('/S[5]', 'NVARCHAR(MAX)') As Code
    FROM
    (
        SELECT   CAST('<S>'+REPLACE([name] ,' ','</S><S>' ) +'</S>' AS XML) AS [name]
        FROM @Table1
    ) AS A
    CROSS APPLY [name].nodes('S') AS Split(a)

结果

Date                     Name   Req                     Code
----------------------------------------------------------------
2018-08-08 23:02:57,731  INFO   [AllRequestInterceptor] CRTST020
2018-08-08 23:03:02,028  ERROR  [AJAXController]        CRTST003
2018-08-08 23:03:11,687  INFO   [SOAPLoggingHandler]    CRTST020

关于sql - 如何根据空格拆分字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56148118/

相关文章:

sql - NULL 与 NOT NULL 性能差异

sql - 如何进行区分大小写的 GROUP BY?

c# - 连接到sql server,问题

获得最大 SQL Server 2012 写入性能的 C# 代码

mysql - 无法添加外键约束 1215

sql - 替换 sql 字符串中第一次出现的 '.'

sql - 对于返回多于 1 个值的 SQL 选择,当 Id 为 GUID 时,它们如何排序?

sql - 如何为 PIVOT 聚合指定 GROUP BY

sql-server - 如何从字符串中删除所有空格?

SQL 可移植性陷阱