大家对 IF ELSE 语句应该都很熟悉吧,它是用来对过程进行控制的。在 SQL 的世界中 CASE 语句有类似的效果。下面简单的介绍 CASE 语句的用法。

CASE 语句的形式

事实上,CASE 语句有两种形式

 SELECT
-- 简单 CASE 语句(Simple CASE)
CASE GENDER
WHEN 1 THEN '男'
ELSE '女'
END AS GENDER, -- 查询 CASE 语句(Searched CASE)
CASE
WHEN GENDER = 1 THEN '男'
ELSE '女'
END AS GENDER FROM USER_INFO;

注意点:

1、以CASE开头,以END结尾 
2、分支中WHEN 后跟条件,THEN为显示结果 
3、ELSE 为除此之外的默认情况,类似于高级语言程序中switch case的default,可以不加 
4、END 后跟别名

考虑下面的情况,假设有个 USER_INFO 表,定义如下:

 CREATE TABLE USER_INFO
(
NAME VARCHAR2(20) NOT NULL, ---姓名
GENDER NUMBER(1,0), ---性别(1、男 2、女)
BIRTHDAY DATE ---生日
); INSERT INTO USER_INFO VALUES ('张三', 1, DATE '2014-12-27');
INSERT INTO USER_INFO VALUES ('李四', 2, DATE '2014-12-27');

CASE使用案例 1

把 USER_INFO 表导出生成一个文件,要求性别为男或女,而不是1和2,怎么办?我们可以用如下的语句处理:

 SELECT
NAME,
CASE GENDER
WHEN 1 THEN '男'
ELSE '女'
END AS GENDER,
BIRTHDAY
FROM USER_INFO;

CASE使用案例 2

假设 USER_INFO 目前没有值,然后你往 USER_INFO 导入了一批数据,但是很不幸,错把男设置成为2,而把女设置成为1,现在要求你变换过来,怎么办?

方法1:使用三条语句,先把2更新成3,接着把1更新成2,最后把3更新成1,是不是很麻烦?

 UPDATE USER_INFO SET GENDER=3 WHERE GENDER=2;
UPDATE USER_INFO SET GENDER=1 WHERE GENDER=3;
UPDATE USER_INFO SET GENDER=2 WHERE GENDER=1;

方法2:使用CASE语句

 UPDATE USER_INFO SET GENDER=
(
CASE GENDER
WHEN 1 THEN 2
WHEN 2 THEN 1
ELSE GENDER
END
);

DECODE 函数

此外, Oracle 还提供了一个函数来达到和 CASE 语句相同的效果。

 SELECT DECODE(GENDER, 1, '男', 2, '女', '未知') FROM USER_INFO;  
 DECODE(value,if1,then1,if2,then2,if3,then3,...,else)

表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。

If/Else功能实现的3种写法

 一、单个IF
1、 if a=... then
.........
end if; 2、 if a=... then
......
else
....
end if; 二、多个IF if a=.. then
......
elsif a=.. then
....
end if;
这里中间是“ELSIF”,而不是ELSE IF 。这里需要特别注意

oralce的判断语句的更多相关文章

  1. SQLite的时候判断语句是否纯在:出现RuntimeException

    写SQLite的时候判断语句是否纯在: public boolean exist(long id) { String filter = FRIEND_KEY_ID + "=" + ...

  2. 第二周:If判断语句程序当中的作用简介

    1.If语句的作用: 在我们编写程序时经常会遇到内容判断的问题,比如判断内容的真假或者值的大小分别输出内容的问题 这时就会用到我们的If判断语句了,顾名思义,if在英文单词中意思为如果,在Java中他 ...

  3. 关于JavaScript的判断语句(1)

    if语句: if( 判断条件 ){ 判断结果为true执行语句: } if...else语句: if(判断条件){ 判断结果为true时执行的语句: }else{ 判断结果为false时执行语句: } ...

  4. SQL判断语句用法和多表查询

    1.格式化时间sql语句 本例中本人随便做了两张表,和实际不是很相符,只是想说明sql语句的写法. 例1表格式如下: 需求:查询出本表,但需要使time字段的时间格式为yyyy-MM-dd,比如:20 ...

  5. VB的判断语句和循环语句

      判断语句 •If语句 if语句共有4种写法: 第一种语法: If 条件判断语句 then 程序代码 第二种语法:If 条件判断语句 then 程序代码 else 程式代码 第三种语法: If 条件 ...

  6. Interview----求 1+2+...+n, 不能用乘除法、for、while if、else、switch、case 等关键字以及条件判断语句 (A?B:C)

    题目描述: 求 1+2+...+n, 要求不能使用乘除法.for.while.if.else.switch.case 等关键字以及条件判断语句 (A?B:C). 分析: 首先想到的是写递归函数,但是遇 ...

  7. 求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)和不用循环/goto/递归输出1~100的10种写法

    来源:据说是某一年某个公司的面试题 题目:求1+2+…+n, 要求不能使用乘除法.for.while.if.else.s witch.case 等关键字以及条件判断语句(A?B:C) 分析:这题本来很 ...

  8. aspcms中if判断语句的运用

    1.<h3 {if:"[list:isrecommend]"="1"} style="color:red;"{end if}>& ...

  9. if条件判断语句的不同

    let number = ["a":1, "b":2, "c":3]; if let num = number["d"] ...

随机推荐

  1. 学习Linux最简单的方法

    大多数初学者在刚刚接触Linux都会有非常陌生的感觉.往往会有一些疑惑和问题.而我们就沿着这些问题,从远及近,从宏观到微观来理解Linux的简洁和美丽. 问题1:Winows有注册表,为什么Linux ...

  2. Ubuntu 安装ftp

    Ubuntu 用vsftpd 配置FTP服务器 网上的文章好难懂啊..只想要简单粗暴,弄好能用就行啊,复杂的以后研究不行吗...折腾好久,其实弄出来能用不就这么点内容吗... 本文在Ubuntu Se ...

  3. vue中的双向数据绑定详解

    前言 什么是数据双向绑定? vue是一个mvvm框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化.这也算是vue的精髓之处了.值得注意的是,我 ...

  4. getActionBar()为null的解决方法总结(引用他人)

    最近在看android actionBar的使用,环境为AndroidStudio,建一个简单的工程,功能为:两个按钮,一个单击用于显示actionbar,一个用于隐藏actionbar.默认acti ...

  5. linux 安装php bz2扩展

    折腾了半天,最大的坑就是我是用lnmp一键安装php环境,php7下面没有ext文件夹,有个include下面虽然有个ext 但是里面没有需要的bz2 也尝试去pecl  和 pear 上面去找  无 ...

  6. python-UDP传输模型

    #!/usr/bin/python #coding=utf-8 #服务器端 from socket import * from time import ctime HOST="192.168 ...

  7. oracle用plsql登陆出错,提示ORA-12170:TNS:链接超时 --------关闭防火墙试试

    oracle用plsql登陆出错,提示ORA-12170:TNS:链接超时 但是使用sqlplus可以连接 ping 本机127.0.0.1 显示一般故障 后关闭防火墙,问题解决. ps:登录时使用@ ...

  8. TabControl 选项卡控件

    TabControl 控件是由System.Windows.Forms.TabControl类提供的,作用就是讲相关的组件组合到一系列选项卡页面上.   MulitiLine 属性用来设置是否显示多行 ...

  9. android 模拟器无法启动问题

    很早之前就碰到过Android Studio模拟器无法启动的问题,今天终于尝试去解决了下,下面将我解决的方法记录下. 模拟器报错信息为: emulator: ERROR: x86 emulation ...

  10. 撩课-Python-每天5道面试题-第1天

    一. 尽可能详细的描述出一个应用软件, 比如QQ, 在计算机中运行时涉及的软硬件, 以及说明我们编程的侧重点? 电脑开机, 从硬盘中(外部存储设备)加载操作系统(系统软件)到内存(内部存储设备), 并 ...