首页 > 数据库技术 > 详细

Oracle decode和case的区别

时间:2016-02-06 14:10:55      阅读:216      评论:0      收藏:0      [点我收藏+]

case在SQL中有两种写法,先建立一个表
create table salgrade(grade int, sal int);

insert into salgrade values(1,1000);
insert into salgrade values(2,2000);
insert into salgrade values(3,3000);
commit;

第一种写法,简单写法:
select grade,sal,
  case grade
  when 1 then ‘low‘
  when 2 then ‘middle‘
  else ‘high‘
  end
from salgrade;

第二种写法,查找写法:
SELECT grade,sal,
  case when sal<=1000 then ‘low‘
  when sal<=2000 then ‘middle‘
  else ‘high‘
  end
  FROM salgrade;
decode代替第一种写法:
select grade,sal,decode(grade,1,‘low‘,2,‘middle‘,‘high‘) from salgrade;

代替第二种写法:

SELECT grade,sal,
  decode(sign(sal-1000),1,decode(sign(sal-2000),1,‘high‘,‘middle‘),‘low‘)
FROM salgrade;

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

二、case 里可以写>,in 等表达式,decode只是=

三、建函数索引的时候用decode比较好,oracle会自动转换case when导致无法使用到索引

Oracle decode和case的区别

原文:http://www.cnblogs.com/deepbreath/p/5183906.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!