對于 PostgreSQL 中的 Oracle DECODE 函數,可以使用 CASE 表達式或聯合。CASE 表達式根據條件返回第一個匹配的結果,語法為:CASE WHEN 條件 THEN 結果 ELSE 結果 END。聯合通過 UNION ALL 操作符組合多個 SELECT 語句,返回一個包含滿足每個條件的結果列的表。
Oracle DECODE 函數在 PostgreSQL 中的替換
Oracle DECODE 函數是一個用于根據條件判斷而返回不同值的函數。在 PostgreSQL 中,沒有與 DECODE 函數完全相對應的函數,但可以使用 CASE 表達式或聯合來實現類似的功能。
CASE 表達式
CASE 表達式的語法如下:
CASEWHEN условие1 THEN результат1WHEN условие2 THEN результат2...ELSE результат ELSE
END
它根據條件依次進行判斷,并返回與第一個滿足條件的結果。如果沒有任何條件滿足,則返回 ELSE 結果。
聯合
聯合是一種使用多個 SELECT 語句從多個表中檢索數據的技術。它也可以用于實現 DECODE 函數的功能,方法是使用 UNION ALL 操作符組合多個 SELECT 語句:
SELECT CASE WHEN условие1 THEN résultat1 ELSE NULL END AS результат_1
UNION ALL
SELECT CASE WHEN условие2 THEN résultat2 ELSE NULL END AS результат_2
...
上述查詢將返回一個表,其中每行都包含一個滿足條件的結果列。
示例
假設我們有一個表 people,其中包含以下列:
- name - 人員姓名
- gender - 人員性別
我們希望創建一個查詢來根據性別獲取人員的尊稱:
Oracle DECODE 函數:
SELECT name, DECODE(gender, 'M', 'Mr.', 'Ms.') AS title
FROM people;
PostgreSQL CASE 表達式:
SELECT name, CASEWHEN gender = 'M' THEN 'Mr.'WHEN gender = 'F' THEN 'Ms.'ELSE NULLEND AS title
FROM people;
PostgreSQL 聯合:
SELECT name, CASE WHEN gender = 'M' THEN 'Mr.' ELSE NULL END AS title
UNION ALL
SELECT name, CASE WHEN gender = 'F' THEN 'Ms.' ELSE NULL END AS title
FROM people;
這三個查詢都將產生相同的結果如下:
name | title |
---|---|
John | Mr. |
Mary | Ms. |