decode()函数

最近在写sql语句的时候,发现decode()这个函数确实很强大,方便。

--DECODE() 目前只有oracle提供这个函数
DECODE() 相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶 形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值.
其具体的语法格式如下:
DECODE(input_value,value,result[,value,result…][,default_result]);
其中:
input_value 试图处理的数值。DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果
value 是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应
result 是一组成序偶的结果值
default_result 未能与任何一序偶匹配成功时,函数返回的默认值

下面的例子说明了,如何读取用户CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的项目,作为DECODE函数的实参支持值。
SELECT checkup_type,
DECODE(blood_test_flag,’Y’,’Yes’,’N’,’No’,NULL,’None’,’Invalid’)
decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
--该函数的含义如下:
if 条件 =值1 then
  return (翻译值1)
  else if 条件=值2 then
    return(翻译值2)
    ...
    else if 条件=值n then
      return(翻译值n)
      else
        return(缺省值)
        end if
--实例1 其标准是:工资在8000元以下的将加20%;工资在8000元以上的加15%

select decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2,salary from employee

--1.比较大小

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

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


-- 例如:变量1=10,变量2=20 则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的

 

posted on 2013-02-27 13:27  淘果果  阅读(1205)  评论(0编辑  收藏  举报

导航