我有这样的示例数据
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/