我正在尝试建立诊断报告,以检查诊断是否通过或失败。但是随着员工使用不同的日志记录方式,我面临着挑战。条目示例:
有时,他们会在输入诊断结果之前插入一些其他字词。
如何将其设置为标志-检查诊断是否通过或失败。
任何建议都会在SQL中得到赞赏
答案 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