1. 程式人生 > >Oracle SQL 之條件表示式

Oracle SQL 之條件表示式

                     

前言

在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

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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;
  • 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