如何使用Oracle Case Statement测试不平等

时间:2014-05-27 16:59:41

标签: sql oracle case-statement

这很好用:

    select 
      case (1+2) -- (or_some_more_complicated_formula_yielding_a_numeric_result)
        when 200 then '200'
        when 100 then '100'
        else          'other'
      end hi_med_low
    from dual  ;

但我需要做更多这样的事情:

    select 
      case (1+2) -- (or_some_more_complicated_formula_yielding_a_numeric_result)
        when greater than 200 then 'high'
        when less than    100 then 'low'
        else                       'medium'
      end hi_med_low
    from dual ;

建议?

3 个答案:

答案 0 :(得分:7)

case支持评估布尔条件的语法。它并不像你想要的那样干净,因为你需要重新编写每个表达式,但它完成了工作:

select 
  case
    when (1+2) > 200 then 'high'
    when (1+2) < 100 then 'low'
    else                  'medium'
  end hi_med_low
from dual ;

一种可能的缓解措施可能是为子公式使用子查询,因此您只需编写一次:

select 
  case
    when formula > 200 then 'high'
    when formula < 100 then 'low'
    else                    'medium'
  end hi_med_low
from (select (1+2) AS formula from dual);

答案 1 :(得分:4)

是的,请使用CASE WHEN

CASE 
    WHEN some_formula > 200 THEN 'High'
    WHEN some_formula < 100 THEN 'Low'
    ELSE 'Medium'
END

答案 2 :(得分:2)

您可以在WHEN子句中放置复杂的表达式,或者如果需要,甚至可以调用函数。如果需要,您还可以在THEN子句中执行复杂的表达式。所以这样的事情很容易实现:

SELECT CASE
         WHEN a + b > 200 THEN
           a + b + c 
         WHEN a + b <= 200 THEN 
           a + b + d
       END