度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 2373|回复: 10
打印 上一主题 下一主题

[分享] decode函数与case when函数

[复制链接]

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
跳转到指定楼层
楼主
发表于 2020-4-17 14:47:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DECODE函数:
基本语法为:DECODE(value, if1, then1, if2, then2, if3, then3,...ifn, thenn, else)
表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。亦即:decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

用法示例:
select decode(sign(arg1-arg2),-1, arg1, arg2) from dual;
select decode(sign(3-5),1 ,3, 5) from dual ;

注:sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1

CASE WHEN:
基本语法:
SELECT <myColumnSpec> =   
  CASE WHEN <A> THEN <somethingA>   
     WHEN <B> THEN <somethingB>   
     ELSE <somethingE> END

除了可以在select 中使用CASE 外,where 子句,group by 子句,order by 子句都可以使用

用法示例:
    SELECT     CASE           
                WHEN price IS NULL THEN 'Unpriced'           
                WHEN price < 10 THEN 'Bargain'           
                WHEN price BETWEEN 10 and 20 THEN 'Average'           
                ELSE 'Gift to impress relatives'      
               END AS "Range",      
               Title   
    FROM titles   
    where   
        CASE           
                    WHEN price IS NULL THEN 'Unpriced'           
                    WHEN price < 10 THEN 'Bargain'           
                    WHEN price BETWEEN 10 and 20 THEN 'Average'           
                    ELSE 'Gift to impress relatives'     END in('Average','Bargain')  
    GROUP BY     CASE           
                    WHEN price IS NULL THEN 'Unpriced'           
                    WHEN price < 10 THEN 'Bargain'           
                    WHEN price BETWEEN 10 and 20 THEN 'Average'           
                    ELSE 'Gift to impress relatives'     END,      
                    Title   
    ORDER BY     CASE           
                    WHEN price IS NULL THEN 'Unpriced'           
                    WHEN price < 10 THEN 'Bargain'           
                    WHEN price BETWEEN 10 and 20 THEN 'Average'           
                    ELSE 'Gift to impress relatives'      
                    END,Title

DECODE 与CASE WHEN 的比较
1、DECODE  Oracle 特有;
2、CASE WHEN  Oracle ,  SQL Server,  MySQL 都可用;
3、DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断,CASE  可用于=,>=,<,<=,<>,is null,is not null 等的判断;
4、DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活;

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
沙发
发表于 2020-4-17 16:37:06 | 只看该作者
DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活;
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
板凳
 楼主| 发表于 2020-4-18 14:11:41 | 只看该作者
陈晓龙 发表于 2016-5-17 16:37
DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活;

不要告诉你是复制的我最后一句话
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
地板
发表于 2020-4-18 14:30:46 | 只看该作者
张兴康 发表于 2016-5-18 14:11
不要告诉你是复制的我最后一句话

没有呀,我也是这么认为的!
回复 支持 反对

使用道具 举报

348

主题

3572

帖子

9328

积分

论坛元老

Rank: 8Rank: 8

积分
9328
5#
发表于 2020-4-18 23:10:26 | 只看该作者
针对不同情况,运用不同函数,实现不同功能
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
6#
 楼主| 发表于 2020-4-19 14:04:40 | 只看该作者
万望 发表于 2016-5-18 23:10
针对不同情况,运用不同函数,实现不同功能

回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
7#
 楼主| 发表于 2020-4-19 14:05:22 | 只看该作者
陈晓龙 发表于 2016-5-18 14:30
没有呀,我也是这么认为的!

点评

表情太多!  详情 回复 发表于 2020-4-19 15:23
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
8#
发表于 2020-4-19 15:23:05 | 只看该作者
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
9#
 楼主| 发表于 2020-4-20 14:15:23 | 只看该作者

面部表情多,证明神经系统控制得好
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
10#
发表于 2020-4-20 16:40:25 | 只看该作者
张兴康 发表于 2016-5-20 14:15
面部表情多,证明神经系统控制得好

呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-24 20:49 , Processed in 0.164895 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表