CASE WHEN THEN END 条件取值

语法

case [<表达式>]
when <表达式条件值1> then <满足条件时返回值1>
[when <表达式条件值2> then <满足条件时返回值2>
……
[else <不满足上述条件时返回值>]]
end

功能

当 <表达式>=<表达式条件值1……n> 时,返回对应 <满足条件时返回值1……n>。

当 <表达式条件值1……n> 不为条件表达式时,与函数 decode() 相同。

decode(<表达式>,<表达式条件值1>,<满足条件时返回值1>,<表达式条件值2>,<满足条件时返回值2> ……,<不满足上述条件时返回值>)。

注意:

  1. 以CASE开头,以END结尾

  2. 分支中WHEN 后跟条件,THEN为显示结果

  3. ELSE 为除此之外的默认情况,类似于高级语言程序中switch case的default,可以不加

  4. END 后跟别名

  5. 只返回第一个符合条件的值,剩下的when部分将会被自动忽略,得注意条件先后顺序

参数

  • <表达式> 默认为 true (逻辑型)

  • <表达式条件值1……n> 类型要与<表达式>类型一致,若<表达式>为字符型,则<表达式条件值1……n>也要为字符型

返回值

满足条件时返回值1......n

示例

建立环境:

create table t_week (xqn number(1,0));
insert into t_week (xqn) values(1);
insert into t_week (xqn) values(2);
insert into t_week (xqn) values(3);
insert into t_week (xqn) values(4);
insert into t_week (xqn) values(5);
insert into t_week (xqn) values(6);
insert into t_week (xqn) values(7);
commit;

查询结果:

SQL> select xqn,
  2  case xqn
  3  when 1 then '星期一'
  4  when 2 then '星期二'
  5  when 3 then '星期三'
  6  else '星期三以后'
  7  end 星期
  8  from t_week;

       XQN 星期
---------- ----------
         1 星期一
         2 星期二
         3 星期三
         4 星期三以后
         5 星期三以后
         6 星期三以后
         7 星期三以后

已选择7行。

另类写法,如下:

SQL> select xqn,
  2  case
  3  when xqn=1 then '星期一'
  4  when xqn=2 then '星期二'
  5  when xqn=3 then '星期三'
  6  else '星期三以后'
  7  end 星期
  8  from t_week;

       XQN 星期
---------- ----------
         1 星期一
         2 星期二
         3 星期三
         4 星期三以后
         5 星期三以后
         6 星期三以后
         7 星期三以后

已选择7行。

decode 正确表达:

SQL> SELECT xqn,
  2  decode(xqn,1,'星期一',2,'星期二',3,'星期三','星期三以后') 星期
  3  from t_week;

       XQN 星期
---------- ----------
         1 星期一
         2 星期二
         3 星期三
         4 星期三以后
         5 星期三以后
         6 星期三以后
         7 星期三以后

已选择7行。

decode 错误表达:

SQL> SELECT xqn,
  2  decode(TRUE,xqn=1,'星期一',xqn=2,'星期二',xqn=3,'星期三','星期三以后') 星期
  3  from t_week;
decode(TRUE,xqn=1,'星期一',xqn=2,'星期二',xqn=3,'星期三','星期三以后') 星期
               *
第 2 行出现错误:
ORA-00907: 缺失右括号

组合条件表达:

SELECT xqn,
      CASE
         WHEN xqn <= 1  THEN '星期一'
         -- 条件同:not(xqn<=1) and xqn<=2
         WHEN xqn <= 2  THEN '星期二'
         -- 条件同:not(xqn<=1 and xqn<=2) and xqn<=3
         WHEN xqn <= 3  THEN '星期三'
         ELSE '星期三以后'
      END 星期
FROM t_week;

关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号