Oracle SQL 之條件表示式
阿新 • • 發佈:2018-12-21
前言
在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);
- 1
- 2
- 3
- 4
我們可以看到其中有 使用者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;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
[ 第二題 ]
查詢員工資訊,增加一個額外的欄位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;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
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;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
[ 第二題 ]
SELECT u.user_id, u.user_name, u.user_age, decode(u.user_name, '張三', '主管', '李四', '經理', '員工') user_type, u.user_birthday FROM user_info u;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
注:如果只是判斷兩個數的大小,我們可以使用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;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9