Oracle-Decode()函數和CASE語句的區別:?
具體示例如下:?
1.CASE語句:?
SELECT CASE SIGN(5 - 5)?
WHEN 1 THEN 'Is Positive'?
WHEN -1 THEN 'Is Negative'?
ELSE 'Is Zero' END?
FROM DUAL;?
后臺實現:?
if (SIGN(5 – 5) = 1) {?
'Is Positive';?
} else if (SIGN(5 – 5) = 2 ) {?
'Is Negative';?
}else {?
‘Is Zero’?
}?
2. Decode函數:?
SELECT DECODE(SIGN(5 – 5), 1, 'Is Positive', -1, 'Is Negative', ‘Is Zero’)?
FROM DUAL?
后臺實現:?
switch ( SIGN(5 – 5) )?
{?
case 1 : 'Is Positive'; break;?
case 2 : 'Is Negative'; break;?
default : ‘Is Zero’?
}?
雖然在上面的示例中,兩者看似都可以實現。但在遇到特殊情況時,Decode()的實現就相對復雜得多了。?
例如:?
SELECT CASE X-FIELD?
WHEN X-FIELD < 40 THEN ‘X-FIELD < 40’?
WHEN X-FIELD < 50 THEN ‘X-FIELD < 50’?
WHEN X-FIELD < 60 THEN ‘X-FIELD < 60’?
ELSE ‘UNBEKNOWN’END?
FROM DUAL?
具體示例如下:?
1.CASE語句:?
SELECT CASE SIGN(5 - 5)?
WHEN 1 THEN 'Is Positive'?
WHEN -1 THEN 'Is Negative'?
ELSE 'Is Zero' END?
FROM DUAL;?
后臺實現:?
if (SIGN(5 – 5) = 1) {?
'Is Positive';?
} else if (SIGN(5 – 5) = 2 ) {?
'Is Negative';?
}else {?
‘Is Zero’?
}?
2. Decode函數:?
SELECT DECODE(SIGN(5 – 5), 1, 'Is Positive', -1, 'Is Negative', ‘Is Zero’)?
FROM DUAL?
后臺實現:?
switch ( SIGN(5 – 5) )?
{?
case 1 : 'Is Positive'; break;?
case 2 : 'Is Negative'; break;?
default : ‘Is Zero’?
}?
雖然在上面的示例中,兩者看似都可以實現。但在遇到特殊情況時,Decode()的實現就相對復雜得多了。?
例如:?
SELECT CASE X-FIELD?
WHEN X-FIELD < 40 THEN ‘X-FIELD < 40’?
WHEN X-FIELD < 50 THEN ‘X-FIELD < 50’?
WHEN X-FIELD < 60 THEN ‘X-FIELD < 60’?
ELSE ‘UNBEKNOWN’END?
FROM DUAL?
相對而言,CASE語句在處理相似問題就顯得比較簡捷靈活。另外,當需要匹配少量數值時,選用Decode會更加方便一些。
本文轉自茄子_2008博客園博客,原文鏈接:http://www.cnblogs.com/xd502djj/archive/2010/08/11/1797579.html,如需轉載請自行聯系原作者。