T-SQL - 删除字符串前后的所有内容

问题描述 投票:0回答:5

请帮助我查看下面显示的SQL查询。

这是我得到的错误:

System.Exception:TransformerException ---> Library.Utilities.TransformerException:Transformer转换[0000000000085153227:documentId]使用[4:transformId],剩余时间[00:00:54.4517645:TimeSpan]输出文档为[0000000000085153231:documentId] - - >依此类推......

我正在训练只检索此值85153227。

请协助

SELECT  
    SUBSTRING(message, 0, CHARINDEX('System.Exception', message)) + ' ' +  
    CASE          
       WHEN CHARINDEX('Transformer transforming [', message) > 0
          THEN SUBSTRING(message, CHARINDEX('[',message), LEN(message)-CHARINDEX('[', message)) 
          ELSE '' 
    END
FROM
    dbo.Documents 

谢谢

sql sql-server tsql
5个回答
1
投票
DECLARE @ AS VARCHAR(MAX)= 
'System.Exception: TransformerException ---> Library.Utilities.TransformerException: Transformer transforming [0000000000085153227:documentId] using [4:transformId] with time remaining [00:00:54.4517645:TimeSpan] output document is [0000000000085153231:documentId]'

SELECT 
CAST(
SUBSTRING(@,
    CHARINDEX('Transformer transforming [',@,0) + LEN('Transformer transforming [')
,   CHARINDEX(':documentId]',@,0) - ( CHARINDEX('Transformer transforming [',@,0) + LEN('Transformer transforming [') ))
AS BIGINT)

--output

--------------------
85153227

(1 row affected)

0
投票

很难确定对此的确切响应,因为您没有确定异常是否始终结构相同。通过提供的内容,这就是我要做的。

  1. 使用STUFF删除前导字符串; STUFF([Message], 1, CHARINDEX(N'Transformer transforming [', [Message]) + 25, N'')
  2. 然后假设带有数字的字符串是19个字符长,然后我做一个SUBSTRING来找到第一个非零字符。 SUBSTRING({field}, PATINDEX('%[^0]%', {field} + '.'), LEN({field}))将第1步替换为{field}的字符串(我试图在这里简化代码)。

这是显示此内容的SQL语句。

IF OBJECT_ID(N'tempdb..#t') IS NOT NULL DROP TABLE #t
SELECT CAST('System.Exception: TransformerException ---> Library.Utilities.TransformerException: Transformer transforming [0000000000085153227:documentId] using [4:transformId] with time remaining [00:00:54.4517645:TimeSpan] output document is [0000000000085153231:documentId] ' AS NVARCHAR(MAX))
    AS [Message]
    INTO #t

SELECT *,
    STUFF([Message], 1, CHARINDEX(N'Transformer transforming [', [Message]) + 25, N'') AS BeginningCharactersStripped,
    SUBSTRING(LEFT(STUFF([Message], 1, CHARINDEX(N'Transformer transforming [', [Message]) + 25, N''), 19), PATINDEX('%[^0]%', LEFT(STUFF([Message], 1, CHARINDEX(N'Transformer transforming [', [Message]) + 25, N''), 19) + '.'), LEN(LEFT(STUFF([Message], 1, CHARINDEX(N'Transformer transforming [', [Message]) + 25, N''), 19)))
        AS Number
FROM #t
WHERE [Message] like N'%Transformer transforming [[]%'

0
投票

根据您提供的内容,我稍微修改了您的查询以获得您想要的输出。您可能需要根据数据进行调整。

SELECT  substring(message,0,charindex('System.Exception',message)) + ' ' + 
CASE          WHEN charindex('Transformer transforming [',message) > 0
          THEN Convert(Varchar(8000), Convert(BigInt, Substring(message,charindex('[',message) + 1, charindex(':documentid]',message)-(CharIndex('[',message)+1)))) ELSE '' END
FROM dbo.Documents 

0
投票

你可以试试这个:

with MsgWithZeroesTbl as 
(SELECT  'System.Exception ' + 
        CASE      
            WHEN charindex('Transformer transforming [',message) >= 0
            THEN substring(message,charindex('[',message) + 1, charindex(':',message, charindex('[',message))- (charindex('[',message) + 1)) ELSE '' 
        END as MsgWithZeros
        FROM dbo.Documents )
Select substring(MsgWithZeros, patindex('%[^0]%',MsgWithZeros), 10) from MsgWithZeroesTbl

0
投票

我提出了:

DECLARE @string varchar(8000) = 
'System.Exception: TransformerException ---> Library.Utilities.TransformerException: Transformer transforming [0000000000085153227:documentId] using [4:transformId] with time remaining [00:00:54.4517645:TimeSpan] output document is [0000000000085153231:documentId] --->'

SELECT cast(substring(@string, p1.p, p2.p-p1.p) as bigint)
FROM (VALUES (patindex('%[0-9]%', @string))) p1(p)
CROSS APPLY (VALUES (charindex(':', @string, p1.p+1))) p2(p);

输出:

85153227
© www.soinside.com 2019 - 2024. All rights reserved.