SQL Oracle:在前一列中找到子字符串时,创建一个值为“Approved”、“Denied”或“Not specified”的新列

ovfsdjhp  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(104)

我有一个名为ANES.ANESTH_COMMENTS的列,其中包含非结构化的注解。如果ANES.ANESTH_COMMENTS有一些“Approved”、“Either”、“yes”、“Either”或“verified”的变体,我希望名为STATUS的列的值为“Approved”。如果ANES.ANESTH_COMMENTS包含“Denied”、“Not approved”、“no”或“declined”的变体,则STATUS为“Denied”。
我一直遇到这样的问题:由于大小写敏感,逗号,空格,子字符串前后的字符,子字符串被遗漏了。例如,当我使用'%Approved%'时,'approved'将丢失,而当我使用'%Denied %'时,'Denied,'将丢失。
在我的select子句中,我有以下内容:

,CASE 
        WHEN ', ' + anes.anesth_comments +',' LIKE '%, approve,%'
        or ', ' + anes.anesth_comments +',' LIKE '%, yes,%'
        or ', ' + anes.anesth_comments +',' LIKE '%, either,%'
        or ', ' + anes.anesth_comments +',' LIKE '%, verified,%'
            THEN 'Approved' 
        when ', ' + anes.anesth_comments +',' LIKE '%, denied,%'
         or ', ' + anes.anesth_comments +',' LIKE '%, not approved,%'
         or ', ' + anes.anesth_comments +',' LIKE '%, no,%'
         or ', ' + anes.anesth_comments +',' LIKE '%, declined,%'
            then 'Denied'
            else 'Not specified'
        END AS status

我犯了错误。
我以前有过这个,但它没有捕捉到不同的变化:

case
        when anes.anesth_comments like '%Approved%' 
        or anes.anesth_comments like '%approved%' 
        OR anes.anesth_comments like '%APPROVED%' 
        or anes.anesth_comments like '%: yes%' 
        or anes.anesth_comments like '%: Yes%' 
        or anes.anesth_comments like '%: YES%'
        or anes.anesth_comments like '%Approve%' 
        or anes.anesth_comments like '%approve%' 
        or anes.anesth_comments like '%Either%'
        or anes.anesth_comments like '%EIther%'
        or anes.anesth_comments like '%yes%'
        or anes.anesth_comments like '%verified%'
            then 'Approved'
        when ser.name = 'Bariatrics' or
        anes.anesth_comments like '%Denied%' 
        or anes.anesth_comments like '%denied%' 
        or anes.anesth_comments like '%DENIED%' 
        or anes.anesth_comments like '%NOT APPROVED%' 
        or anes.anesth_comments like '%: No%' 
        or anes.anesth_comments like '%: no%' 
        or anes.anesth_comments like '%: NO%' 
        or anes.anesth_comments like '%: DENIED %'
        or anes.anesth_comments like '% Declined%'
            then 'Denied'
        else 'Not specified'
    end as status

我最大的问题是在子串前后有单词或字符时捕捉它。此外,当子字符串前后有标点符号或空格时。
我感谢任何帮助!
注解通常超过200个字符,并且遵循彼此不同的语法

ogq8wdun

ogq8wdun1#

如果要使用like运算符,请使用upper()lower()。下面是基本情况表达式的显示方式:

case 
 when upper(anes.anesth_comments) like '%NOT APPROVE%' 
   or upper(anes.anesth_comments) like '%DENIED%'
   or upper(anes.anesth_comments) like '%DECLINE%'
 then 'Denied'
 when upper(anes.anesth_comments) like '%APPROVE%' 
   or upper(anes.anesth_comments) like '%VERIFIED%' 
   or upper(anes.anesth_comments) like '%EITHER%' 
   or upper(ser.name) like '%BARIATRICS%'
 then 'Approved'
 else 'Not Specified'
end as status

如果只是简单地将%YES%%NO%添加到表达式中,您可能会遇到问题,因此您应该查看示例并确定在表达式中包含Yes/No的最佳方式。您可能需要添加其他条件,例如:

or (upper(comments) like '% YES%' and upper(comments) not like '%YESTERDAY%')

你应该试着找到一个更好的词,可以沿着是/否为您的条件。

相关问题