Oracle case inside where clause

I think this is the best way to solve your problem:

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;

Of course, you could use Dynamic SQL, but it'd be more difficult and less effective.


 SELECT * FROM dual
 WHERE (1 =1)
 AND (SYSDATE+1 > SYSDATE)
 AND CASE WHEN i_value = 'S' THEN 1 ELSE CASE WHEN (30 > 40) THEN 1 ELSE 0 END END = 1
 AND CASE WHEN i_value = 'T' THEN 1 ELSE CASE WHEN (25 < 35) THEN 1 ELSE 0 END END = 1;

Why so ser use case?

 SELECT * FROM dual
  WHERE (1 =1)
    AND ( SYSDATE+1 > SYSDATE )
    AND ( ((30 > 40) and i_value <> 'S') or i_value = 'S' )
    AND ( ((25 < 35) and i_value <> 'T') or i_value = 'T' );