DECODE()函数

DECODE()函数,它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。

区别于SQL的其它函数,DECODE函数还能识别和操作空值。
语法:DECODE(control_value,value1,result1[,value2,result2…][,default_result]);
control _value试图处理的数值。DECODE函数将该数值与后面的一系列的偶序相比较,以决定返回值。

value1是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应
result1 是一组成序偶的结果值。
default_result 未能与任何一个值匹配时,函数返回的默认值。

例如:
select  decode( x , 1 , 'x is 1 ', 2 , 'x is 2', 'others') from dual ;
当x等于1时,则返回‘x is 1’。
当x等于2时,则返回‘x is 2’。
否则,返回others’。
SQL> select  decode( 2 , 1 , 'x is 1 ', 2 , 'x is 2', 'others') from dual ;

DECODE                                                                         
------                                                                         
x is 2                                                                         

SQL> SELECT DECODE( SIGN(0), 1 ,'Is Positive', -1, 'Is Nagative', 'Is Zero')  from dual;

DECODE(                                                                        
-------                                                                        
Is Zero   

需要,比较2个值的时候,可以配合SIGN()函数一起使用。

SQL> SELECT DECODE( SIGN(5-6), 1 ,'Is Positive', -1, 'Is Nagative', 'Is Zero')  FROM DUAL;

DECODE(SIGN                                                                    
-----------                                                                    
Is Nagative 

同样,也可以用CASE实现:
SQL> SELECT CASE SIGN(50 - 6)
  2  WHEN  1  THEN  'Is Positive'
  3  WHEN -1 THEN  'Is Nagative'
  4  ELSE 'Is Zero' END
  5  FROM DUAL;

CASESIGN(50                                                                    
-----------                                                                    
Is Positive


符:1、sign()函数:判断俩个值的大小
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1

例如:
变量1=10,变量2=20
结合decode():
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值

则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的
SQL> select decode(sign(10-20),-1,10,20) from dual;

DECODE(SIGN(10-20),-1,10,20)                                                   
----------------------------                                                   
                          10

2、greatest()取最大值
SQL> select greatest(3,5,10,8,20,2) from dual ;

GREATEST(3,5,10,8,20,2)                                                        
-----------------------                                                        
                     20 

SQL> select greatest('b','a','f','w','g','t') from dual ;

G                                                                              
-                                                                              


Oracle-Decode()函数和CASE语句的区别:
具体示例如下:

1.CASE语句:
SQL> SELECT CASE SIGN(5 - 5)
  2  WHEN 1 THEN 'Is Positive'
  3  WHEN -1 THEN 'Is Negative'
  4  ELSE 'Is Zero' END
  5  FROM DUAL;

CASESIGN(5-                                                                    
-----------                                                                    
Is Zero

后台实现:
if (SIGN(5 – 5) = 1) {
'Is Positive';
} else if (SIGN(5 – 5) = 2 ) {
'Is Negative';
}else {
‘Is Zero’

}

2. Decode函数:
SQL> SELECT DECODE(SIGN(5-5), 1, 'Is Positive', -1, 'Is Negative', 'Is
  2  Zero') FROM DUAL ;

DECODE(                                                                        
-------                                                                        
Is                                                                             
Zero

后台实现:
switch ( SIGN(5 – 5) )
{
case 1 : 'Is Positive'; break;
case 2 : 'Is Negative'; break;
default : ‘Is Zero’
}
虽然在上面的示例中,两者看似都可以实现。但在遇到特殊情况时,Decode()的实现就相对复杂得多了。


相对而言,CASE语句在处理相似问题就显得比较简捷灵活。另外,当需要匹配少量数值时,选用Decode会更加方便一些。

你可能感兴趣的:(sql,null)