Oracle SQL case when 表达式


以上截图来自官方文档:

Oracle® Database SQL Language Reference
11g Release 2 (11.2)


Case表达式处理的是逻辑判断。基于行数据的逻辑判断,不需要去调用存储过程。

        在简单case表达式中,WHEN comparison_expr THEN return_expr是成对出现的,oracle就是从左往右搜索判断找到第一个comparison_expr和expr相等的,然后返回return_expr。如果没有WHEN ... THEN中的comparison_expr和expr相等,就返回else_expr。否则返回null.

        在搜索case表达式中,oracle从左到右搜索判断直到找到第1个为true的表达式。然后返回return_expr。如果没有condition为true,返回ELSE指定的值。否则,返回null.

        oracle使用短路径搜索,只有在前1个不相等(简单case表达式)或者条件判断为false(搜索case表达式),才会进行下一个的判断匹配。

        在简单case表达式中,expr和comparison_expr必须要么是相同的数据类型(CHAR, VARCHAR2, NCHAR, or NVARCHAR2, NUMBER, BINARY_FLOAT, or BINARY_DOUBLE),或者是都是数字数据类型。如果表达式都是数字类型,oracle把所有的隐式转换到其中最高优先级的类型,返回值也是这种类型。

        对于简单case表达式和搜索case表达式,所有的return_exprs必须要么是相同的数据类型(CHAR, VARCHAR2, NCHAR, or NVARCHAR2, NUMBER, BINARY_FLOAT, or BINARY_DOUBLE),或者是都是数字数据类型。如果所有返回表达式都是数字类型,oracle把所有的隐式转换到其中最高优先级的类型,返回值也是这种类型。

        CASE表达式中的最大参数个数是65535。WHEN ... THEN算2个参数,ELSE ...算1个参数,case ... 算一个参数。


简单case表达式(只能判断是否相等,在需求简单时候很简洁,当然你也可以数值相减然后用sign函数间接判断数值大小)

SELECT cust_last_name,
   CASE credit_limit WHEN 100 THEN 'Low'
   WHEN 5000 THEN 'High'
   ELSE 'Medium' END AS credit
   FROM customers
   ORDER BY cust_last_name, credit;

CUST_LAST_NAME       CREDIT
-------------------- ------
Adjani               Medium
Adjani               Medium
Alexander            Medium
Alexander            Medium
Altman               High
Altman               Medium
. . .


搜索case表达式(判断when后面的表达式是否为真,功能更加灵活强大)

SELECT AVG(CASE WHEN e.salary > 2000 THEN e.salary
   ELSE 2000 END) "Average Salary" FROM employees e;

Average Salary
--------------
    6461.68224


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Oracle中,可以使用CASE WHEN语句来处理多个条件。语法如下: CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 WHEN condition3 THEN result3 ... ELSE default_result END 其中,condition1、condition2、condition3等是多个条件,result1、result2、result3等是对应条件的结果,default_result是当所有条件都不满足时的默认结果。 例如,以下语句将根据不同的销售额计算不同的奖金: SELECT CASE WHEN sales > 100000 THEN sales * .1 WHEN sales > 50000 THEN sales * .05 WHEN sales > 10000 THEN sales * .02 ELSE END AS bonus FROM sales_table; ### 回答2: 在Oracle中,CASE WHEN语句可以帮助我们实现根据多个条件来返回不同的结果。这种情况下,我们需要使用多个条件来确定返回哪个结果。 CASE WHEN语句的语法如下: CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 WHEN condition3 THEN result3 ... ELSE resulDefault END 其中,condition1、condition2、condition3等都是条件表达式,当符合条件1时就返回result1,符合条件2时就返回result2,符合条件3时就返回result3,依此类推。如果所有条件都不符合,就返回resulDefault。 在使用多个条件时,我们需要指定多个条件表达式和对应的结果。例如,假设我们有一个student表,其中有3个字段:id、name、score,我们需要根据成绩分数不同来返回不同的等级,可以使用如下的CASE WHEN语句: SELECT id, name, score, CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 AND score < 90 THEN 'B' WHEN score >= 70 AND score < 80 THEN 'C' ELSE 'D' END AS grade FROM student; 以上语句中,当成绩分数在90分及以上时,就返回A等级;当成绩分数在80~90分之间时,就返回B等级,以此类推。如果成绩分数不在上述范围内,就返回D等级。 总之,在使用Oracle中的CASE WHEN语句时,我们需要根据实际需求来指定多个条件表达式和对应的结果。这样可以使我们的SQL语句更加精确,实现更加灵活的数据查询和操作。 ### 回答3: 在Oracle数据库中,使用CASE WHEN语句可以根据多个条件来进行判断和处理。CASE WHEN语句是一种流程控制语句,类似于if…else语句,通常用于根据不同的条件执行不同的操作。下面我们将详细介绍OracleCASE WHEN多个条件的使用方法及实例。 CASE WHEN语句的基本语法如下: CASE WHEN condition_1 THEN result_1 WHEN condition_2 THEN result_2 ... WHEN condition_n THEN result_n ELSE default_result END 其中,condition_1至condition_n表示不同的条件,result_1至result_n表示与条件对应的结果,default_result为可选项,表示若没有符合任何一个条件,则返回的默认结果。 当需要使用多个条件时,我们可以在CASE WHEN语句中添加更多的WHEN语句,以对多个条件进行处理。例如,假设我们需要根据不同的销售额区间计算不同的折扣率,可以使用以下语句: SELECT customer_name, order_date, order_total, CASE WHEN order_total >= 10000 THEN '9折' WHEN order_total >= 5000 AND order_total < 10000 THEN '95折' WHEN order_total >= 3000 AND order_total < 5000 THEN '9.5折' ELSE '无折扣' END AS discount_rate FROM orders; 以上语句将根据不同的销售额区间返回不同的折扣率。如果销售额大于等于10000元,则返回9折;如果销售额在5000元到10000元之间,则返回95折;如果销售额在3000元到5000元之间,则返回9.5折;否则返回无折扣。 在使用多个条件时,需要注意条件的顺序,通常应该将最具体的条件放在最前面,最普遍的条件放在最后。如果不按照正确的顺序编写条件,可能会导致条件无法正确匹配,从而产生错误的结果。 综上所述,CASE WHEN语句是Oracle数据库中进行流程控制的常用语句,可以根据多个条件进行判断和处理。在使用多个条件时,需要注意条件的顺序以及正确使用AND和OR等逻辑运算符,以确保语句的正确执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值