如何在Oracle中的case语句中添加两个用逗号分隔的引号的字符

Posted

技术标签:

【中文标题】如何在Oracle中的case语句中添加两个用逗号分隔的引号的字符【英文标题】:How add two characters with quotes separated by comma in case statement in Oracle 【发布时间】:2020-02-26 17:11:31 【问题描述】:

我有一个场景,当案例验证成功时,我从案例语句中选择两个字符“P”,“E”,即“ALL”=“ALL” 以下是我想要实现的目标:

select location,
grade,
City,
process_flag,
from table_v 
where process_flag in (
Case 
when :process_type = 'Processed' then 'P'
when :process_type = 'ERROR' then 'E'
when :process_type = 'ALL' then 'P','E'
ELSE process_flag
END;

Process_type 可以传递为 'Processed'、'ERROR'、'ALL'

怎样才能实现?

【问题讨论】:

【参考方案1】:

您可以使用ored 条件:

where 
       :process_type = 'Processed' and process_flag = 'P'
    or :process_type = 'ERROR'     and process_flag = 'E'
    or :process_type = 'ALL'       and process_flag in ('P', 'E')

【讨论】:

【参考方案2】:

您可以在IN 子句中使用多个值:

WHERE ( :process_type, process_flag ) IN (
        ( 'Processed', 'P' ),
        ( 'ERROR',     'E' ),
        ( 'ALL',       'P' ),
        ( 'ALL',       'E' ),
      )

如果你想匹配 CASE 语句的 ELSE 子句,那么:

WHERE ( :process_type, process_flag ) IN (
        ( 'Processed', 'P' ),
        ( 'ERROR',     'E' ),
        ( 'ALL',       'P' ),
        ( 'ALL',       'E' ),
      )
OR    :process_type NOT IN ( 'Processed', 'ERROR', 'ALL' )

【讨论】:

以上是关于如何在Oracle中的case语句中添加两个用逗号分隔的引号的字符的主要内容,如果未能解决你的问题,请参考以下文章

C语言中 For语句后面的括号里有两个分号是啥意思啊?

Mysql 数据字段值是用逗号隔开,如何写SQL语句

C语言中 For语句后面的括号里有两个分号是啥意思啊?

如何在oracle sql中的where条件中使用case语句?

where 子句 oracle 中的 case 语句

Oracle SQL - 添加 CASE 语句后“不是按表达式分组”