このセクションではPostgresで使用可能な SQLの条件表現を説明しています。
Tip: これらの機能以上の条件表現を必要とする場合は、 別のプログラミング言語を使ってストアドプロシージャを 書かれることをお勧めします。
CASE WHEN condition THEN result [WHEN ...] [ELSE result] END
SQL CASE表現は、一般的な条件表現で、 他の言語のif/else文と似ています。CASE句は、 表現が有効な場所であれば、どこでも使用することができます。 conditionはboolean型を 返す表現です。結果が真ならば、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(value[, ...])
COALESCE関数はNULL以外の、最初の引数を 返します。これはディスプレーにデータが検索される際、 ディフォルト値をNULL値に置き換える時に使用できます。
SELECT COALESCE(description, short_description, '(none)') ...
NULLIF(value1, value2)
NULLIF関数はvalue1と value2が等しい場合のみNULLを返します。 その他の場合はvalue1を返します。 上記のCOALESCEのように、逆演算を実行する際に 使用します。
SELECT NULLIF(value, '(none)') ...
Tip: COALESCE関数とNULLIF関数は CASE表現の簡略表記です。実装の早い段階でCASE 表現に書き換えられ、その後の関数はCASEとして 扱われます。したがって、誤ったCOALESCE関数や、 NULLIF関数の使用は、CASEの エラーメッセージを表示させることがあります。