我正在尝试构建一个诊断报告,以检查诊断是否通过或失败。但我面临着一个挑战,因为员工使用不同的方式记录结果。条目示例:
有一段时间,他们在诊断结果输入之前插入一些其他单词。
如何使它作为标志-检查诊断是否已通过或失败。
在SQL中,任何建议都将是非常感谢的。
发布于 2018-10-10 14:05:12
实现这一目标的一种方法是使用PATINDEX并替换。如果没有您提到的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 verbiagehttps://stackoverflow.com/questions/52732293
复制相似问题