Oracle的case if else用法

转载出处:https://blog.csdn.net/shangboerds/article/details/41989283

经常有这类问题,比如性别的男女,一般在数据库中不存男女,而存数字0或1,1或2,查询出来展示的时候做转换。

CREATE TABLE USER_INFO
(
    NAME        VARCHAR2(20) NOT NULL,  ---姓名
    GENDER      NUMBER(1,0),            ---性别(1、男    2、女)
    BIRTHDAY    DATE                    ---生日
);
 
INSERT INTO USER_INFO VALUES ('张三', 1, DATE '2014-12-27');
INSERT INTO USER_INFO VALUES ('李四', 2, DATE '2014-12-27');

 

CASE使用案例 1 把 USER_INFO 表导出生成一个文件,要求性别为男或女,而不是1和2,怎么办?

SELECT 
    NAME,
    CASE GENDER
        WHEN 1 THEN '男'
        ELSE '女'
    END AS GENDER,
    BIRTHDAY
FROM USER_INFO;


CASE使用案例 2 假设 USER_INFO 目前没有值,然后你往 USER_INFO 导入了一批数据,但是很不幸,错把男设置成为2,而把女设置成为1,现在要求你变换过来,怎么办? 

方法1:利用第三个数据做中转

UPDATE USER_INFO SET GENDER=3 WHERE GENDER=2;
UPDATE USER_INFO SET GENDER=1 WHERE GENDER=3;
UPDATE USER_INFO SET GENDER=2 WHERE GENDER=1;
 

方法2:使用case语句

UPDATE USER_INFO SET GENDER=
(
  CASE GENDER
    WHEN 1 THEN 2
    WHEN 2 THEN 1
    ELSE GENDER
  END
);

 

两者相比比,处理多的数据时是case语句效率更快,不容易出问题

CASE使用案例 3 假设让你把张三的生日更新成1949-10-1,李四的生日更新成1997-7-1等,类似这样的更新有很多。该怎么办呢?

大多人会用普通的update语句,为什么不试试用case语句呢,

UPDATE USER_INFO SET BIRTHDAY =
(
  CASE NAME
    WHEN '张三' THEN DATE '1949-10-1'
    WHEN '李四' THEN DATE '1997-7-1'
    ELSE BIRTHDAY
  END
)
WHERE NAME in ('张三','李四');

 

然而,case语句有两种形式

1、SELECT
    -- 简单 CASE 语句(Simple CASE)
    CASE GENDER  
        WHEN 1 THEN '男'  
        ELSE '女'  
    END AS GENDER

FROM USER_INFO;

 2、SELECT

    -- 查询 CASE 语句(Searched CASE)
    CASE   
        WHEN GENDER = 1 THEN '男'  
        ELSE '女'  
    END AS GENDER
    
FROM USER_INFO;


DECODE 函数 

此外, Oracle 还提供了一个函数来达到和 CASE 语句相同的效果。

SELECT DECODE(GENDER, 1, '男', 2, '女', '未知') FROM USER_INFO;
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值