where 子句 oracle 中的 case 语句

Posted

技术标签:

【中文标题】where 子句 oracle 中的 case 语句【英文标题】:Case statement in where clause oracle 【发布时间】:2019-08-19 20:43:28 【问题描述】:

在 where 子句中,我有两个选项 1) status = 'N' and type = '1' 和 2) status = 'Y' and type = '1' 基于参数我需要执行一个选项:

  where 
     case 
        when (carName = :P_PARAMETER) then  status = 'N' and type = '1'
        else status = 'Y' and type = '1'
     end

在执行get error之后,有什么办法可以解决这个问题或其他方法吗?

【问题讨论】:

你得到什么错误? 【参考方案1】:

你需要重写逻辑:

where type = '1'
  AND ((status = 'N' AND carName = :P_PARAMETER))
        OR status = 'Y')

【讨论】:

【参考方案2】:

type = '1' 选项在这两种情况下都很常见,因此您可以将其排除在 CASE 语句之外(也因为尝试从 CASE 语句返回 2 个值在语法上是错误的):

where 
  type = '1' 
  and
  status = case when carName = :P_PARAMETER then 'N' else 'Y' end

【讨论】:

【参考方案3】:

你可以使用decode()函数:

 where type = '1'  -- common for all cases
   and status= decode(carName,:P_PARAMETER,'N','Y')

Demo

【讨论】:

以上是关于where 子句 oracle 中的 case 语句的主要内容,如果未能解决你的问题,请参考以下文章

Oracle where 子句中的 case 表达式

Oracle:在 Where 子句中使用 Case 语句

Oracle SQL 不同的 where 子句与 case when

Oracle SQL的Where子句中如何写case语句?

Oracle - where 子句中的案例

在 where 子句中使用 case 语句的 Oracle Missing 关键字