Oracle_SQL 之条件表达式

来源:互联网 发布:ppt数据分析图表制作 编辑:程序博客网 时间:2024/05/22 23:10

前言

在Oracle中,我们有两种方式可以实现 IF-THEN-ELSE 的逻辑:CASE 语句 或者 DECODE 函数
相比较来说DECODE 函数会更加的简洁。

我们在oracle数据库中建立一个user_info表:

CREATE TABLE user_info(user_id NUMBER(2) primary key,        user_name VARCHAR2(14),       user_age NUMBER(4),        user_birthday DATE);

我们可以看到其中有 用户ID主键,用户姓名,用户年龄,以及用户生日。

CASE 语句

[ 第一题 ]
查询所有用户的信息,我们增加一个额外的显示字段age_type,将年龄小于20的设置为A,年龄在20到30之间的设置为B,大于30的设置为C。

SELECT u.user_id,       u.user_name,       CASE          WHEN u.user_age < 20 THEN          'A'         WHEN u.user_age >= 20 AND u.user_age < 30 THEN          'B'         ELSE          'C'       END age_type  FROM user_info u;

case查询结果1

[ 第二题 ]
查询员工信息,增加一个额外的字段user_type,如果是张三则显示为主管,如果是李四则显示为经理,其他显示为员工

SELECT u.user_id,       u.user_name,       CASE u.user_name         WHEN '张三' THEN          '主管'         WHEN '李四' THEN          '经理'         ELSE          '员工'       END user_type  FROM user_info u;

case查询结果2

DECODE 函数

我们将上面的的两题使用DECODE 函数再写一遍,代码如下:

[ 第一题 ]

SELECT u.user_id,       u.user_name,       u.user_age,       decode(trunc(u.user_age/10),       1, 'A',       2, 'B',        'C') age_type,       u.user_birthday  FROM user_info u;

[ 第二题 ]

SELECT u.user_id,       u.user_name,       u.user_age,       decode(u.user_name,       '张三', '主管',       '李四', '经理',        '员工') user_type,       u.user_birthday  FROM user_info u;

注:如果只是判断两个数的大小,我们可以使用sign()函数

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

如题:
年龄小于25的设置为A,年龄大于25的设置为B,等于25的设置为 C:

SELECT u.user_id,       u.user_name,       u.user_age,       decode(sign(u.user_age-25),       -1, 'A',       1, 'B',       'C') age_type,       u.user_birthday  FROM user_info u;
原创粉丝点击