区别:

decode是pl/sql语法,只能在oracle中使用,
case when是标准SQL的语法,哪儿都能用,也就是说移植性更强.

decode像是case when的精简版,
当要实现的功能比较简单时,用decode方便,简洁.

decode只能做等值的,case when可以做区间的,使用范围来进行条件区分,decode能做到的,case when也能做到;效率方面,个人觉得两者效率差不多;但decode的语法要简单些,但它只能做等值的比较;case when end 能做条件的判断。

Oracle中的CASE When:

SELECT LogID,UserID,LogTime,Url,Description,(
  case
when OperateType = 0 then '新增'
   when OperateType=1 then '修改'
   else '删除'
  end ) OperationName
FROM LOG

Oracle中的Decode():
·含义解释:
  decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

SELECT LogID,UserID,LogTime,Url,Description,
  decode(OperateType,0,'新增',1,'修改','删除') OperationName
  FROM LOG

区别:二者在固定比较条件时使用差不多,如OperateType和固定的值0,1,2等作比较。但是如果当比较条件不固定时,如OperateType变成Sarlary时候,对区间0-2000,2000-5000,5000以上,显然case when会容易很多。

其实,decode和case when很多时候是可以等效的,选用那个,完全可以由程序员自己的习惯和熟练程度来决定。但值得一提的是注意CaseWhen的两种形态,将三者罗列如下。我想最好的分析方法就是去实际写一个sql测试一下了,这儿就不多说了。

CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
(case when的一个变种)
CASE
WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
DECODE(col|expression, search1, result1
[, search2, result2,...,]
[, searchn, resultn,...,]
[, default])

case 和decode的区别的更多相关文章

  1. case when then else end 与 decode 的区别

    case when  then else end : 条件可以有 等于 ,大于 ,小于 与 decode : 条件只可以有等于的.

  2. Oracle 行转列总结 Case When,Decode,PIVOT 三种方式 - 转

    最近又碰到行专列问题了,当时不假思索用的是子查询,做完后我询问面试管行专列标正的写法应该如何写,他告诉我说应该用"Decode",索性我就总结一下,一共三种方式 --======= ...

  3. 5.单行函数,多行函数,字符函数,数字函数,日期函数,数据类型转换,数字和字符串转换,通用函数(case和decode)

     1  多行函数(理解:有多个输入,但仅仅输出1个结果) SQL>select count(*) from emp; COUNT(*) ------------- 14 B 字符函数Lowe ...

  4. Oracle 里 case 和decode的简单用法

    case 就相想当于C#里面switch    l 列:根据员工的职位,计算加薪后的薪水数据 如果职位是Analyst , 加薪10% 如果职位是Programmer 加薪5% 如果职位是clerk ...

  5. Oracle特有函数 case when decode exists 分页rownum

    select * from EMP eselect * from dept dselect * from salgrade s--Oracle特有函数 case whenselect case 2 w ...

  6. 【SQL】CASE与DECODE

    1. case..when case..when语句用于按照条件返回查询结果,如当我们想把emp表的工资按照多少分成几个不同的级别,并分别统计各个级别的员工数.SQL语句如下: select (cas ...

  7. case和decode的用法(行转列)

    创建了一张成绩表,如下图所示: 在oracle中,这两个函数我们都可以使用,代码及结果如下: decode用法: select Name,decode(Subject,'语文',1,'数学',2,'英 ...

  8. encode和decode的区别

    $octets = encode("iso-8859-1", $string);把一个串从perl内部格式转为iso-8859-1格式$string = decode(" ...

  9. python encode decode unicode区别及用法

    decode 解码 encode 转码 unicode是一种编码,具体可以百度搜 # coding: UTF-8 u = u'汉' print repr(u) # u'\u6c49' s = u.en ...

随机推荐

  1. Consul 安装的与启动

    1.下载地址:https://www.consul.io/downloads.html linux 下载地址: wget https://releases.hashicorp.com/consul/0 ...

  2. windows 可执行文件分析

    windows可执行文件是什么? 是具有PE文件格特性的文件,例如:.exe.dll.ocx等文件. 注:(这里只是让大家能明了一些,其实,可执行与否,和后缀没有什么关系,后缀只是windows方便管 ...

  3. C++【vector】用法和例子

    /*** * vector 基础api复习 * 8 AUG 2018 */ #include <iostream> #include <vector> using namesp ...

  4. [CQOI2009]叶子的染色【性质+树形Dp】

    Online Judge:Bzoj1304,Luogu P3155 Label:无根树,树形Dp 题目描述 给定一棵\(N\)个节点的无根树,它一共有\(K\)个叶子节点.你可以选择一个度数大于1的节 ...

  5. JAXL连接Openfire发送房间消息

    使用composer形式安装的JAXL <?php require_once "vendor/autoload.php"; $client = new JAXL(array( ...

  6. mysqlbinlog: unknown variable 'default-character-set=utf8'

    [xxx@dbhost log]$ mysqlbinlog mysql-bin. mysqlbinlog: unknown variable 'default-character-set=utf8' ...

  7. 双系统可以进入Windows但进入Ubuntu时无法进入系统引导,只有左上角光标闪

    双系统可以进入Windows但进入Ubuntu时无法进入系统引导,只有左上角光标闪 这时候可以进入windows下的easyBCD重新创建ubuntu引导项即可

  8. leyou_06_Nginx的自启

    1.在linux系统的/etc/init.d/目录下创建nginx文件 vim /etc/init.d/nginx 添加以下内容 #!/bin/sh # # nginx - this script s ...

  9. spring cloud深入学习(十三)-----使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

    随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何快读定位 ...

  10. Java的一些小知识

    Switch和If的区别: Switch case成功后将不再向下继续执行,而If却要每个条件判断一遍.过于浪费: Java中的多态: 方法重载: 通常是指在同一个类中,相同的方法名对应着不同的方法实 ...