欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

说说 Oracle 的 CASE 表达式

程序员文章站 2024-01-22 21:40:58
...

说说 Oracle 的 CASE 表达式

使用 CASE 表达式,我们可以在 SQL 中实现类似 if-elseif-else 逻辑。Oracle 9i 及其以上版本,都支持 CASE 表达式。

推荐使用 CASE 表达式,因为相对于 DECODE() 函数来说,CASE 表达式与 ANSI 兼容,且已成为 SQL /92 标准的一部分,而且 CASE 表达式更易理解。

1 使用表达式确定返回值

语法如下:

CASE search_expression
  WHEN expression1 THEN result1
  WHEN expression2 THEN result2
 ...
  WHEN expressionN THEN resultN 
  ELSE default_result
END

其中 :

  • search_expression 是待求值的表达式 。
  • expression1 、expression2、…、expressionN 是要与 search_expression 进行比较的表达式 。
  • result1 、 result 2、…、 resultN 是相应逻辑判断分支的返回值。假设 expressionN 的值等于 search_expression ,那么就返回 resultN ,以此类推。
  • ELSE 中的 default_result 是当上述表达式都无法匹配时,所返回的默认值。
select n.STAFF_NAME,
  case n.PASSWORD_LEVEL
    when 1 then '弱密码'
    when 2 then '中等密码'
    when 3 then '强密码'
    else '未知'
  end
from  NCC_STAFF_MANAGER n;

运行结果:
说说 Oracle 的 CASE 表达式

注意: NULL 必须放在 else 条件中才有效。放在 when 表达式中,无法判定:

select
  case null
    when null then 'null'
  else 'when 中无法比较'
  end
from dual;

运行结果:

when 中无法比较

从这个示例中可以看出, when null 无效,实际 null 表达式走的是 else 分支。

2 使用条件确定返回值

语法如下:

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  WHEN conditionN THEN resultN
  ELSE default_result
END

与“使用表达式确定返回值”的语法相比较,少了 search_expression。其它部分相同。

我们可以把上例改为 “使用条件确定返回值” 的语法形式,实现同样的功能:

select n.STAFF_NAME,
  case
    when n.PASSWORD_LEVEL=1 then '弱密码'
    when n.PASSWORD_LEVEL=2 then '中等密码'
    when n.PASSWORD_LEVEL=3 then '强密码'
    else '未知'
  end
from  NCC_STAFF_MANAGER n;

在“使用表达式确定返回值”的语法中,我们还可以在 when 表达式中使用操作符,请看下例:

select n.STAFF_NAME,
  case
    when n.PASSWORD_LEVEL<=2 then '密码修改提醒'
    when n.PASSWORD_LEVEL>2 then '强密码'
    else '未知'
  end
from  NCC_STAFF_MANAGER n;

运行结果:
说说 Oracle 的 CASE 表达式

相关标签: Oracle