4.10. 条件表現

このセクションではPostgresで使用可能な SQLの条件表現を説明しています。

Tip: これらの機能以上の条件表現を必要とする場合は、 別のプログラミング言語を使ってストアドプロシージャを 書かれることをお勧めします。

CASE

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

SQL CASE表現は、一般的な条件表現で、 他の言語のif/else文と似ています。CASE句は、 表現が有効な場所であれば、どこでも使用することができます。 conditionboolean型を 返す表現です。結果が真ならば、CASE表現の値は resultとなります。偽の場合は、 その後にあるWHEN句を探します。WHEN conditionが偽の場合、 case表現の値はELSE句のresult となります。

例:

=> SELECT * FROM test;
 a
---
 1
 2
 3

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

result表現のすべてのデータ型は 1つの出力型に強制されなければなりません。詳細は Section 5.5をご覧下さい。

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

この"simple" CASE表現は 上記の通常のフォームの特別な変型です。expressionは 計算され、等しいものが見つかるまでWHEN句の すべてのvalueを比較します。 等しい値が見つからない場合、ELSE句の result、またはNULLが返ります。 これはC言語のswitch文と似ています。

上記の例は下記のようなCASEと使って簡単に記述することができます。

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

COALESCE

COALESCE(value[, ...])

COALESCE関数はNULL以外の、最初の引数を 返します。これはディスプレーにデータが検索される際、 ディフォルト値をNULL値に置き換える時に使用できます。

SELECT COALESCE(description, short_description, '(none)') ...

NULLIF

NULLIF(value1, value2)

NULLIF関数はvalue1value2が等しい場合のみNULLを返します。 その他の場合はvalue1を返します。 上記のCOALESCEのように、逆演算を実行する際に 使用します。

SELECT NULLIF(value, '(none)') ...

Tip: COALESCE関数とNULLIF関数は CASE表現の簡略表記です。実装の早い段階でCASE 表現に書き換えられ、その後の関数はCASEとして 扱われます。したがって、誤ったCOALESCE関数や、 NULLIF関数の使用は、CASEの エラーメッセージを表示させることがあります。