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
-
w
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会更加方便一些。