http://blog.csdn.net/zhangbingtao2011/article/details/51384393

一,DECODE函数

其基本语法为:
DECODE(value, if1, then1, if2, then2, if3, then3,...ifn, thenn, else)

表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。亦即:decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

延伸用法:
1. 与sign函数联用比较大小:
select decode(sign(arg1-arg2),-1, arg1, arg2) from dual; --get arg1与arg2的较小值
select decode(sign(3-5),1 ,3, 5) from dual

注:sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1

2. 表、视图结构转化:
基本思路:使用substrb函数实现对字段的判断,然后用decode函数对数据进行重新计算,并生成新的数据和构成新的表(table or view)。

二,CASE WHEN

其语法如下:

SELECT <myColumnSpec> =
  CASE WHEN <A> THEN <somethingA>
     WHEN <B> THEN <somethingB>
     ELSE <somethingE> END

除了可以在select 中使用CASE 外,where 子句,group by 子句,order by 子句都可以使用

SELECT     CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END AS "Range",
Title
FROM titles
where
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives' END in('Average','Bargain')
GROUP BY CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives' END,
Title
ORDER BY CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,Title

rm_site_master 表结构:

rma_center | name

---------------------------

123 |qw

23 |ASde

45 |sssdf

55 |e3fbg

55555 |adfv

22221 |sdfsfe

4 |sdfeg

579 |lojgdex

select name,
CASE
WHEN rma_center IS NULL THEN 'Null'
WHEN rma_center > 1000 THEN '>1000'
WHEN rma_center BETWEEN 30 and 100 THEN '30~100'
ELSE 'Gift to impress relatives' END AS "RMA CENTER Type"
from rm_site_master
where CASE
WHEN rma_center IS NULL THEN 'Null'
WHEN rma_center > 1000 THEN '>1000'
WHEN rma_center BETWEEN 30 and 100 THEN '30~100'
ELSE 'Gift to impress relatives' END in('30~100','>1000')
group by CASE
WHEN rma_center IS NULL THEN 'Null'
WHEN rma_center > 1000 THEN '>1000'
WHEN rma_center BETWEEN 30 and 100 THEN '30~100'
ELSE 'Gift to impress relatives' END,
name
order by CASE
WHEN rma_center IS NULL THEN 'Null'
WHEN rma_center > 1000 THEN '>1000'
WHEN rma_center BETWEEN 30 and 100 THEN '30~100'
ELSE 'Gift to impress relatives' END,
name

三,DECODE 与CASE WHEN 的比较

 1,DECODE Oracle 特有;
 2,CASE WHEN Oracle , SQL Server, MySQL 都可用;
 3,DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断,CASE  可用于=,>=,<,<=,<>,is null,is not null 等的判断;

4,DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活;

最新文章

  1. Angularjs+node+Mysql实现地图上的多点标注
  2. Android在外部存储空间中读写文件
  3. 程序员遇到BUG的解释
  4. maven使用实例记录
  5. 端午小长假--前端基础学起来03CSS为网页添加样式
  6. 一个比较完整的Inno Setup 安装脚本
  7. php配置伪静态的方法
  8. 【Executor】配置ThreadPoolExecutor
  9. Spark 问题总结
  10. JS动态呈现还可以输入字数
  11. 【BZOJ 1911】 [Apio2010]特别行动队
  12. android之frame动画详解
  13. Missile:双状态DP
  14. [转]JavaScript Namespaces and Modules
  15. sql的ExecuteScalar(),ExecuteNonQuery()
  16. python基础===随机打印txt文件中的某一行
  17. python_线程的开启、守护线程、锁、死锁、事件、定时器、条件、队列、池
  18. python之路--类的约束, 异常处理, MD5, 日志处理
  19. docker container can not connect internet
  20. java 线程(七)等待与唤醒

热门文章

  1. java相关资料连接
  2. js select 默认回显判断
  3. pt100、pt1000,和热电偶
  4. python通过globals()函数获取全局变量,并销毁全局变量
  5. LightOJ-1275-Internet Service Providers(数学)
  6. 如何识别和解决SQL Server中的热闩锁(PAGELATCH_EX)
  7. thinkpadT470P安装问题
  8. 繁繁的游戏 Floyd
  9. SSH如何使用
  10. Linux下CFD-Post视图透明的解决方法