在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主键,用户姓名,用户年龄,以及用户生日。
[ 第一题 ]
查询所有用户的信息,我们增加一个额外的显示字段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;
[ 第二题 ]
查询员工信息,增加一个额外的字段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;
我们将上面的的两题使用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;