decode函数用法

来源:互联网 发布:明朝灭亡知乎 编辑:程序博客网 时间:2024/06/08 06:39
 

Oracle Decode函数是一个功能强大的Oracle特有函数(似乎别的数据库都没有这样的函数)

函数原型

Decode(条件,值1,转换值1,值2,转换值2……,缺省值)   相当于if then 或者替代where条件

用法:

1,替代where 用于一些条件和判断的过滤

网上范例:

SELECT COUNT(DECODE(DEPT_NO,0020,’X’,NULL)) D0020_COUNT,

COUNT(DECODE(DEPT_NO,0030,’X’,NULL)) D0030_COUNT,

SUM(DECODE(DEPT_NO,0020,SAL,NULL)) D0020_SAL,

SUM(DECODE(DEPT_NO,0030,SAL,NULL)) D0030_SAL

FROM EMP WHERE ENAME LIKE ‘SMITH%’

sum或count时,根据条件做过滤

2,select  sum(a) from A 时,A无记录,sum值为null,想当sum为null时,转换为0.可以:

Decode( (select  sum(a) from A ) , null , 0 , (select  sum(a) from A ) )  相当与nvl

3,比较大小

select decode(sign(变量1-变量2),-1,变量1,变量2) from dual

 

============================================================================================================

 

一、sign函数用于比较大小,语法如下:sign( number )

 

        number 是要测试标志的数字.

If number < 0, then sign returns -1.
If number = 0, then sign returns 0.
If number > 0, then sign returns 1.

 

二、decode 具有和 IF-THEN-ELSE 一样的功能。decode 函数语法如下:

decode( expression , search , result [, search , result]... [, default] )

如:decode(sign(cj1p-cj2p),1,cj1p,cj2p),若cj1p>cj2p,则返回cj1p,否则返回cj2p