Oracle case里面的where子句

ajm*_*d04 6 sql oracle plsql case where

这是一个简单的问题,我已经阅读了有关使用CASEin WHERE子句的一些细节,但无法清楚地了解如何使用它.以下是我的示例查询:

1    SELECT * FROM dual
2    WHERE (1 =1)
3     AND (SYSDATE+1 > SYSDATE)
4     AND (30 > 40)
5     AND (25 < 35);
Run Code Online (Sandbox Code Playgroud)

我有i_value参数中的程序.如果i_value为'S',我需要忽略第4行,如果i_value为'T',我需要忽略第5行.

提前致谢.

Ser*_*sov 4

我认为这是解决您的问题的最佳方法:

select *
from dual
where (1 = 1)
      and (sysdate + 1 > sysdate)
      and case
            when i_value = 'S'
              then
                case
                  when (25 < 35)
                    then 1
                    else 0
                end
            when i_value = 'T'
              then
                case
                  when (30 > 40)
                    then 1
                    else 0
                end
          end = 1;
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用动态 SQL,但它会更困难且效率较低。