他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

6.12. 条件式

この節では PostgreSQL で使用可能な SQL 準拠の条件式について説明します。

Tip: ここで説明する条件式より発展した機能を求める場合は、より表現の豊富なプログラム言語でストアドプロシージャを記述することで解決されます。

6.12.1. CASE

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

SQLCASE 式は他の言語の if/else 構文に類似した通常の条件式です。CASE 句は式が有効な位置であればどこでも使用可能です。 条件とは 論理値の結果を返す式です。もし結果が真であれば CASE 式の値は result (結果) となります。もし結果が偽であれば同じようにして後に続く WHEN 句が調べられます。WHEN条件 のひとつも真でない場合、CASE 式の値は ELSE 句の result (結果)になります。 ELSE 句が無く、どの条件とも一致しない場合、結果は NULL です。

ひとつの例を示します。

=> 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 (結果)式のデータ型は単一の出力型に強制されなければなりません。詳細は Section 7.5 を参照ください。

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

この"簡略形" CASE 式は上に記述した一般形式からの特別な変形です。条件式は計算され、等しいものが見つかるまで WHEN 句のすべての値と比較されます。 等しいものが見つからない場合、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

6.12.2. COALESCE

COALESCE(value [, ...])

COALESCE 関数は、NULL でない自身の最初の引数を返します。 データを表示の目的で取り出す際、NULL 値の代わりにデフォルト値を使う場合、時として便利なことがあります。 その例です。

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

6.12.3. NULLIF

NULLIF(value1, value2)

NULLIF 関数は、value1value2 が等しい場合、またその場合に限ってのみ、NULL 値を返します。その他の場合は value1 を返します。 これを使って、上記の COALESCE の例の逆演算を実行できます。

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

Tip: COALESCENULLIF 関数はCASE 式の単なる簡略表記です。これらの式は処理の早期段階で実際には CASE 式に変換されて、引き続く処理では CASE を取り扱っているように見なされます。したがって、COALESCE または NULLIF を 誤って使用すると、CASE に関連したエラーメッセージが表示されることがあります。