日历

2008 7.25 Fri
  12345
6789101112
13141516171819
20212223242526
2728293031  
«» 2008 - 7 «»

博主资料

留言 加为好友 收藏

用户名:  yxzwlk
来自:  北京 海淀
年龄:  25
爱好: 银色 足球 篮球

个人统计

用户名: yxzwlk
等级: 初来乍到
威望: 200
积分: 519
在线时间: 13 小时
日志总数: 32
评论数量: 36
访问次数: 185879
建立时间: 2006-05-05
RSS订阅       手机访问

文章搜索

文章列表

最近访问的人:

Q~aid
2008-07-24 13:07:03
MyBlog
2008-04-30 16:54:57
IT
2008-04-25 11:35:24
2008-04-25 10:33:22
疯狂E恋
2008-03-20 13:09:04
刺激
2008-03-13 17:18:58
来吧上海网站建设!
2008-03-07 18:04:04
不能则学,不知则..
2008-03-05 17:14:39
李雪
2008-03-04 16:09:51
技术天才
2008-03-03 20:01:02

日志文章

2007年05月25日 15:19:26

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

首先,举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 UNBEKNOWNEND
FROM DUAL
因此,我个人认为,CASE语句在处理类似问题就显得非常灵活。当只是需要匹配少量数值时,用Decode更为简洁。

Tags: Oracle   Decode()   CASE   比较  

类别: 其他 |  评论(1) |  浏览(3453) |  收藏
发表评论