添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

9.18. 條件表示式

本節介紹 PostgreSQL 中符合 SQL 標準可用的條件表示式。

提示

如果您的需求超出了這些條件表示式的功能,您可能需要考慮使用功能更強的程序語言編寫 stored procedure。

9.18.1. CASE

SQL 中的 CASE 表示式是一種通用的條件表示式,類似於其他程序語言中的 if / else 語句:

CASE WHEN condition THEN result
     [WHEN ...]
     [ELSE result]
END

CASE子句可用於任何表示式有效的地方。每個條件都是一個回傳布林值的表示式。如果條件結果為 true,則 CASE 表示式的值為該條件之後的結果,而不處理CASE表達式的其餘部分。如果條件的結果不成立,則以相同的方式檢查後續的 WHEN 子句。如果沒有任何 WHEN 條件成立,則 CASE 表示式的值是 ELSE 子句的結果。如果省略了 ELSE 子句並且沒有條件為真,則結果為 null。

範例:

SELECT * FROM test;
SELECT a,
       CASE WHEN a=1 THEN 'one'
            WHEN a=2 THEN 'two'
            ELSE 'other'
    FROM test;
 a | case
---+-------
 1 | one
 2 | two
 3 | other

所有結果表示式的資料型別都必須可轉換為單一的輸出型別。更多細節請參閱 10.5 節

CASE 表示式的「簡單」語法是上述一般語法的變形:

CASE expression
    WHEN value THEN result
    [WHEN ...]
    [ELSE result]
END

計算第一個表示式,然後與 WHEN 子句中的每個表示式的結果值進行比較,直到找到與其相等的值。如果未找到匹配的項目,則回傳 ELSE 子句(或空值)的結果。這與 C 語言中的 switch 語句類似。

上面的例子可以使用簡單的 CASE 語法來撰寫:

SELECT a,
       CASE a WHEN 1 THEN 'one'
              WHEN 2 THEN 'two'
              ELSE 'other'
    FROM test;