oracle中case when then及decode用法
一.case … when … then 语法: 
– 写法一: 
case(条件) 
when 值1 then 返回值1 
when 值2 then 返回值2 
else 缺省值  – 写法二: 
case when 条件1 then 返回值1 
when 条件2 then 返回值2 
else 缺省值 
end; 案例1:
-- 如果部门编号为10的,显示为dept10
-- 如果部门编号为20的,显示为dept20
-- 如果部门编号为30的,显示为dept30
-- 否则显示为other
-- 这一列查询的结果,列名显示为 department 使用
写法一:
select ename,
sal,
case deptno
when 10 then
'dept10'
when 20 then
'dept20'
when 30 then
'dept30'
else
'other'
end department
from emp 写法二:
select ename,
sal,
case
when deptno = 10 then
'dept10'
when deptno = 20 then
'dept20'
when deptno = 30 then
'dept30'
else
'other'
end department
from emp 在这个例子中条件都是等值,结果是一样的。
如果是不等值的或是有多个表达式,就只能用第二种了,比如:
select ename,sal,
case when deptno= 10 or deptno = 20 or deptno = 30 then 'dept'||deptno end dept
from emp; select ename,sal,
case when deptno<=20 then 'dept'||deptno end dept
from emp; select ename,
sal,
case
when sal > 0 and sal <= 1500 then
'level1'
when sal > 1500 and sal <= 2500 then
'level2'
when sal > 2500 and sal <= 4500 then
'level3'
else
'level4'
end sal_level
from emp
order by sal desc; 二.decode函数: 
decode(条件,值1,返回值1,值2,返回值2,…….,缺省值)
使用decode函数来实现案例1:
select ename,
sal,
decode(deptno, 10, 'dept10', 20, 'dept20', 30, 'dept30', 'other') department
from emp 查出来的结果和上面用case when一样,但这句看起来简洁得多了 decode()函数的延伸用法:
1.与sign函数联用比较大小:
--get arg1与arg2的较小值 
语法:select decode(sign(arg1-arg2),-1,arg1,arg2) from dual;  
实例:select decode(sign(3-5),1,3,5) from dual --5 
注:sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1 一个Update语句:把表中某个字段的值进行更改,这条语句是把值为“1”的都改成“8”,“0”改成“9”
update tablename set 字段名= decode(字段名,1,8,0,9) where 字段名 in (1, 0);
三、DECODE 与CASE WHEN 的比较
      1.DECODE 只有Oracle 才有,其它数据库不支持;
      2.CASE WHEN的用法, Oracle、SQL Server、 MySQL 都支持;
      3.DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断,CASE when可用于=,>=,<,<=,<>,is null,is not null 等的判断;
      4.DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活;
      5.另外,在decode中,null和null是相等的,但在case when中,只能用is null来判断
示例如下:
  emp表中有一列comm,如果这列为null,则显示为0,否则,显示为原值:
--decode可以显示我们要求的结果
SQL> select ename,decode(comm,null,0,comm) comma from emp;
-- null没有转成0,仍然是null,不是我们要求的结果
SQL> select ename,(case comm when null then 0 else comm end) comm from emp;
--这样才可以成功将null显示为0
SQL> select ename,(case when comm is null then 0 else comm end) comm from emp;

oracle中的条件语句的更多相关文章

  1. js中的条件语句

    //js中的条件语句 ; //example1 单分支语句 ){ console.log("你已经不年轻了!"); }else{ console.log("你依然很有活力 ...

  2. Mysql中的条件语句if、case

    Mysql中的条件语句在我们对数据进行转换的时候比较有用,这样就不需要创建中转表. IF 函数 IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> ...

  3. Oracle中分页查询语句

    Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用.O ...

  4. java中的条件语句(if、if...else、多重if、嵌套if)

    Java条件语句之 if 生活中,我们经常需要先做判断,然后才决定是否要做某件事情.例如,如果考试成绩大于 90 分,则奖励一个 IPHONE 5S .对于这种"需要先判断条件,条件满足后才 ...

  5. Oracle 中按条件过滤重复记录

    在数据处理中,经常会遇到类似这样的情况:数据库中存在多条记录,其中某些字段值相同,其他字段值不同.实际的业务需要针对这样的情况,只保留一条数据,其他数据删除.如何做到呢?在sql中有top关键字相对容 ...

  6. 【Python】解析Python中的条件语句和循环语句

    1.if语句 if语句有好几种格式,比如: if condition: statement 使用 if ... else ...: if condition: statement(1) else: s ...

  7. oracle中查看sql语句的执行计划

    1.在pl/sql中打开cmd命令容器 2.在cmd命令窗口中输入:explain plan for select * from t; 3.查看sql语句的执行计划:select * from tab ...

  8. mybatis sql中的条件语句

    1.mybatis判断是否为空或null <if test="type!=null and type!=''"> AND type = #{type} </if& ...

  9. [译]javascript中的条件语句

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

随机推荐

  1. Angular面试题四

    二十.angular 的缺点有哪些? 1.强约束 导致学习成本较高,对前端不友好. 但遵守 AngularJS 的约定时,生产力会很高,对 Java 程序员友好. 2.不利于 SEO 因为所有内容都是 ...

  2. redis 事务、Jedis事务处理流程

    127.0.0.1:6379> multiOK127.0.0.1:6379> sadd myset a b cQUEUED  ——>并没有执行,排队等待127.0.0.1:6379& ...

  3. 如何在 Azure 中均衡 Linux 虚拟机负载以创建高可用性应用程序

    负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性. 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性. 你将学习如何执行以下操作: 创建 Azure 负载 ...

  4. Python-Image 基本的图像处理操作

    Python-Image 基本的图像处理操作,有需要的朋友可以参考下. Python 里面最常用的图像操作库是 Image library(PIL),功能上,虽然还不能跟Matlab比较,但是还是比较 ...

  5. 水晶报表自定义纸张大小打印 (Crystal Report Print with custom paper size)

    System.Drawing.Printing.PrintDocument doc = new PrintDocument(); doc.PrinterSettings.PrinterName = & ...

  6. iOS7中UIView的animateKeyframesWithDuration方法讲解

    iOS7中UIView的animateKeyframesWithDuration方法讲解 在iOS7中,给UIView添加了一个方法用来直接使用关键帧动画而不用借助CoreAnimation来实现,那 ...

  7. 关于UIScrollView有些你很难知晓的崩溃情形

    关于UIScrollView有些你很难知晓的崩溃情形 为了实现以下的功能(按钮之间的切换效果): 简短的代码如下: // // RootViewController.m // BUG // // Co ...

  8. 如何打包ipa文件

    如何打包ipa文件 1. 新建一个工程 // // RootViewController.m // YouXianMing // // Copyright (c) 2014年 Y.X. All rig ...

  9. 《C++ Primer Plus》读书笔记之六—函数探幽

    第八章 函数探幽 1.常规函数与内联函数的主要区别不在于编写方式,而在于C++编译器如何将它们组合到程序中. 2.常规函数调用使程序跳到另外一个地址(函数地址),并在函数结束时返回,更详细的的实现过程 ...

  10. 内置数据结构(list)

    列表.元组.字符串.字典和集合是python内置的数据结构,也可以叫内置容器.前3个是线性结构,线性结构可以切片操作.解包和封包操作. dir()方法可以查看对象拥有哪些属性和方法. help()方法 ...