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

我們可以看到其中有 使用者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;