摘要:在本教學中,您將學習如何使用 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
資料表進行示範。

請看以下查詢
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 邏輯。
這個教學對您有幫助嗎?