Oracle 中 decode()、sign()函数用法

一、decode()函数的用法:

函数解释: 

decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
函数的含义如下:

IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF

decode(字段或字段的运算,值1,值2,值3)

这个函数运行的结果是,当字段字段的运算的值等于值1时,该函数返回值2,否则返回值3,当然值1,值2,值3也可以是表达式,这个函数可以简化sql语句。
 
例:

有一张user表    这张表中有一个sex(性别)字段,但是字段的值是1或者0,我们需求是显示男或者女,因此处理,那么decode就可以解决了。

select   decode(u.sex ,1,男,女) from user u;

详解:
decode(u.sex ,1,男,女);   其实decode底层应该是这样比较:u.sex == 1 ? 男 :女(当然if else是可以的),但decode()函数比较的只能是等于,并不能比较 > 、< 、>=、<=,但是我们可以结合sign(n)函数就很方便了,因为sign()函数返回的是 大于0返回1,小于0返回-1,等于0返回0,我们可以根据这三个值来判断,例如:
比较大小:
   a = 10
   b = 30

select decode(sign(a-b),1,'a>b',0,'相等',-1,'a<b') from (select  10 a,30 b from dual);

或者:

select decode(sign(a-b),1,'a>b',0,'相等','a<b') from (select  10 a,30 b from dual);

函数的含义如下:

if((a-b)>=1){
  return 'a>b';
}else if((a-b)==0){
         return '相等'
		}
 else{
	 return 'a<b'
	}

二、sign()函数的用法:

比较大小函数语法:
sign(n);
sign函数解释:取数字n的符号,大于0返回1,小于0返回-1,等于0返回0(n可以是表达式,(n-200))

示例:
1、

select sign(100),sign(-100),sign(0) from dual;

2、a=10,b=30 
   则sign(a-b)返回-1

附:

http://www.cnblogs.com/BetterWF/archive/2012/06/12/2545829.html

转载请注明出处:BestEternity亲笔。

猜你喜欢

转载自blog.csdn.net/BestEternity/article/details/85268389