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

文本挖掘以了解SQL中的诊断是否已通过或失败,sql,sql-server,Sql,Sql Server,我正在尝试构建诊断报告,以检查诊断是否通过或失败。但我面临一个挑战,因为员工使用不同的方式记录结果。条目示例: 诊断:未通过 诊断:没有失败 诊断:通过 诊断:通过 有时,他们会在输入诊断结果之前插入一些其他单词 如何将其设置为标志-以检查诊断是否通过或失败 在SQL中,任何建议都将受到极大的欢迎。您可以通过使用PATINDEX和REPLACE来实现这一点。如果没有你提到的15种不同模式的完整列表,我无法完全评估你面对的是什么,但这里有一个例子 :返回第一个匹配项的起始位置 指定表达式中的模式,

我正在尝试构建诊断报告,以检查诊断是否通过或失败。但我面临一个挑战,因为员工使用不同的方式记录结果。条目示例:

  • 诊断:未通过
  • 诊断:没有失败
  • 诊断:通过
  • 诊断:通过
  • 有时,他们会在输入诊断结果之前插入一些其他单词

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


    在SQL中,任何建议都将受到极大的欢迎。您可以通过使用PATINDEX和REPLACE来实现这一点。如果没有你提到的15种不同模式的完整列表,我无法完全评估你面对的是什么,但这里有一个例子

    :返回第一个匹配项的起始位置 指定表达式中的模式,如果该模式不可用,则为零 在所有有效的文本和字符数据类型上找到

    :将指定字符串值的所有匹配项替换为 另一个字符串值

    以下是一个例子:

    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
    
    DECLARE@诊断表
    (
    [DiagText]NVARCHAR(200)
    );
    --插入一些示例测试数据
    插入@Diagnostic(
    [正文]
    )
    值('Diagnostics:Not Pass')
    ,(“诊断:未失败”)
    ,(“诊断:通过”)
    ,(“诊断:通过”)
    ,(“诊断:失败”)
    ,(“其他文本”);
    --使用case语句计算不同的图案,并使用replace删除所有空格。
    挑选*
    ,当PATINDEX('%:NotPass%',REPLACE([DiagText],'')0时为大小写,然后
    0
    当PATINDEX('%:NotFail%',REPLACE([DiagText],'',')0时,则
    1.
    当PATINDEX('%:Fail%',REPLACE([DiagText],'',')0时,则
    0
    当PATINDEX('%:Pass%',REPLACE([DiagText],'','')0时,则
    1.
    结束[通过]
    来自@Diagnostic
    其中PATINDEX(“%Diagnostics%”,[DiagText])0--这将筛选包含诊断术语的内容
    
    为什么不使用一些regexp?你有多少种不同的图案?有近15种不同的图案。我想做的是查看代理在哪里记录了诊断,并在提到通过或失败时用很少的空格进行检查。我正在努力检查。