SQL DECODE

摘要:在本教學中,您將學習如何使用 SQL DECODE() 函數為查詢添加 if-then-else 邏輯。

SQL DECODE() 函數簡介

SQL DECODE() 函數允許您為 查詢添加程序式的 if-then-else 邏輯。讓我們看看以下範例

SELECT DECODE(1,1,'Equal');
Code language: SQL (Structured Query Language) (sql)

在這個範例中,DECODE() 函數會比較第一個參數(一)和第二個參數(也是一)。由於第一個參數等於第二個參數,該函數會回傳第三個參數,也就是字串 Equal

上面的 DECODE() 函數與下列 IF 語句的效果相同

IF 1 = 1 THEN
    RETURN 'Equal';
END IF;
Code language: SQL (Structured Query Language) (sql)

以下範例會回傳 NULL,因為第一個參數不等於第二個參數。

SELECT DECODE(1,2, 'Equal');
Code language: SQL (Structured Query Language) (sql)

它的作用類似於以下語句

IF 1 = 2 THEN
    RETURN 'Equal';
END IF;
Code language: SQL (Structured Query Language) (sql)

如果想在第一個參數不等於第二個參數時指定值,可以使用 DECODE() 函數的以下形式

SELECT DECODE(1,2, 'Equal', 'Not Equal');
Code language: SQL (Structured Query Language) (sql)

它的作用類似於以下 IF-THEN-ELSE 語句

IF 1 = 2 THEN
    RETURN 'Equal';
ELSE
    RETURN 'Not Equal';
END IF;
Code language: SQL (Structured Query Language) (sql)

一般來說,您可以將 DECODE() 函數的第一個參數與參數列表進行比較,如下列範例所示

SELECT DECODE (2, 1, 'Equal 1', 2, 'Equal 2');
Code language: SQL (Structured Query Language) (sql)

這個範例的作用如同以下的 IF-THEN-ELSE IF 語句

IF 2 = 1 THEN
     RETURN 'Equal 1';
ELSE IF 2 = 2 
    RETURN 'Equal 2';
END IF;
Code language: SQL (Structured Query Language) (sql)

請看以下範例

SELECT DECODE(3,1, 'Equal 1,', 2, 'Equal 2', 'Not Equal 1 or 2');
Code language: SQL (Structured Query Language) (sql)

這個範例的作用類似以下的 IF-THEN-ELSEIF-ELSE 語句

IF 3 = 1 THEN 
    RETURN 'Equal 1';
ELSE IF 3 =2 THEN
    RETURN 'Equal 2';
ELSE
    RETURN 'Not Equal 1 or 2';
END IF;
Code language: SQL (Structured Query Language) (sql)

SQL DECODE() 函數語法

以下說明 SQL DECODE() 函數的語法

DECODE (e , s1, r1[, s2, r2], ...,[,sn,rn] [, d]);
Code language: SQL (Structured Query Language) (sql)

在此語法中

  • e 是要搜尋或與其他參數 s1、s2、… sn 進行比較的參數。
  • s1、s2、… 或 sn 是要搜尋的表達式。函數會依序將第一個參數與 s1、s2、…、sn 比較。如果任何比較 e = s1、e = s2、…、e = sn 回傳 true,則 DECODE() 函數會終止求值並回傳結果。
  • r1、r2、… 或 rn 是當 ei = si 時回傳的結果。
  • d 是一個表達式,當 e 不等於任何參數 s1、s2、… 或 sn 時會回傳它。

SQL DECODE() 範例

我們將使用範例資料庫中的 employees 資料表進行示範。

SQL DECODE: employees table

請看以下查詢

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
ORDER BY DECODE('S',
        'F',
        first_name,
        'L',
        last_name,
        'S',
        salary);
Code language: SQL (Structured Query Language) (sql)

在這個範例中,我們在 ORDER BY 子句中使用了 DECODE() 函數。DECODE() 函數會根據輸入參數回傳要排序的欄位。在這個案例中,DECODE() 函數回傳了 salary 欄位,因此結果集會依 salary 欄位排序。

在本教學中,您已學習如何使用 SQL DECODE() 函數為查詢添加 if-then-else 邏輯。

這個教學對您有幫助嗎?