文本挖掘以了解诊断在SQL中是否通过或失败

时间:2018-10-10 03:43:24

标签: sql sql-server

我正在尝试建立诊断报告,以检查诊断是否通过或失败。但是随着员工使用不同的日志记录方式,我面临着挑战。条目示例:

  1. 诊断:未通过
  2. 诊断:不会失败
  3. 诊断:通过
  4. 诊断:通过

有时,他们会在输入诊断结果之前插入一些其他字词。

如何将其设置为标志-检查诊断是否通过或失败。

任何建议都会在SQL中得到赞赏

1 个答案:

答案 0 :(得分:1)

您可以使用PATINDEX和REPLACE来实现这一目标。没有完整列出您提到的15种不同模式,我无法完全评估您遇到的问题,但这是一个示例。

  

PATINDEX:返回第一次出现的起始位置   指定表达式中的模式;如果不是,则为零   找到所有有效的文本和字符数据类型。

     

REPLACE:将所有出现的指定字符串值替换为   另一个字符串值。

这里是一个例子:

DECLARE @Diagnostic TABLE
    (
        [DiagText] NVARCHAR(200)
    );

--Insert some example test data
INSERT INTO @Diagnostic (
                            [DiagText]
                        )
VALUES ( 'Diagnostics : Not Pass' )
     , ( 'Diagnostics : Not Fail' )
     , ( 'Diagnostics : Pass' )
     , ( 'Diagnostics: Pass' )
     , ( 'Diagnostics: Fail' )
     , ( 'SomeOtherText' );

--use a case statement to evaluated the different patterens, along with using replace to take out all spaces.
SELECT *
     , CASE WHEN PATINDEX('%:NotPass%', REPLACE([DiagText], ' ', '')) <> 0 THEN
                0
            WHEN PATINDEX('%:NotFail%', REPLACE([DiagText], ' ', '')) <> 0 THEN
                1
            WHEN PATINDEX('%:Fail%', REPLACE([DiagText], ' ', '')) <> 0 THEN
                0
            WHEN PATINDEX('%:Pass%', REPLACE([DiagText], ' ', '')) <> 0 THEN
                1
       END AS [Passed]
FROM   @Diagnostic
WHERE  PATINDEX('%Diagnostics%', [DiagText]) <> 0;  --This filters for those containing the Diagnoctics verbiage