Oracle-Decode()函数和CASE语句的比较

上一篇 / 下一篇  2007-08-29 16:00:00 / 个人分类:数据库

 

首先,举2个简单的例子,简单对比一下这2者的区别。

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’
}

在上面的例子中,2者似乎都可以实现。但是,在遇到特殊的问题时,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更为简洁


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-08-07  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 4576
  • 日志数: 143
  • 建立时间: 2007-05-27
  • 更新时间: 2008-07-21

RSS订阅

Open Toolbar