条件式

PostgreSQL 9.1.1文書
前のページ | 巻戻し | 第 9章関数と演算子 | 早送り | 次のページ

# 9.16. 条件式

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

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

## 9.16.1. `CASE`

SQLの`CASE`式は他のプログラミング言語のif/else構文に類似した汎用条件式です。

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

`CASE`句は式が有効な位置であればどこでも使用可能です。それぞれの`condition`とは`boolean`型の結果を返す式です。もしconditionの結果が真であれば、`CASE`式の値は、conditionに続く`result`となります。 そして、`CASE`式の残りは処理されません。 もしconditionの結果が偽であれば後に続く全ての`WHEN`句が同じようにして調べられます。`WHEN`の`condition`の1つも真でない場合、CASE式の値は`ELSE`句の`result`になります。`ELSE`句が省略され、どのconditionも真でない場合、結果は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`式のデータ型は単一の出力型に互換性がなければなりません。詳細は項10.5を参照してください。

以下のように、上記の一般的な形式と異なる`CASE`式の"単純な"形式が存在します。

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

最初の`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

`CASE`式は、結果を決定するために不必要などんな副式をも評価しません。例えば、以下は0除算エラーを防ぐための方法です。

    SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;

## 9.16.2. `COALESCE`

    COALESCE(value [, ...])

`COALESCE`関数は、NULLでない自身の最初の引数を返します。全ての引数がNULLの場合にのみNULLが返されます。データを表示目的で取り出す際、NULL値をデフォルト値で置き換えるためによく使用されています。以下に例を示します。

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

`CASE`式同様、`COALESCE`は結果を決定するために必要な引数のみを評価します。つまり、非NULL引数が見つかれば、その右側にある引数は評価されません。このSQL標準関数は`NVL`と`IFNULL`と類似の機能を提供し、他のいくつかのデータベースシステムで使用されています。

## 9.16.3. `NULLIF`

    NULLIF(value1, value2)

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

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

この例では、`value1`が`(none)`ならばNULLが返ります。 さもなくば`value1`を返します

## 9.16.4. `GREATEST`および`LEAST`

    GREATEST(value [, ...])

    LEAST(value [, ...])

`GREATEST`と`LEAST`関数は数値がいくらあっても、その中から最大値もしくは最小値を選択します。評価される全ての数値は、結果として得られるデータの型と共通の型に変換できなくてはなりません（詳細は項10.5を参照してください）。リストの中のNULL値は無視されます。全ての値がNULLと評価された場合に限って結果はNULLになります。

`GREATEST`および`LEAST`はSQL標準に載っていませんが、共通した拡張です。他のいくつかのデータベースでは、全てがNULLの場合に限定せず、いずれかの引数がNULLである場合にNULLを返すようにしているものもあります。

前のページ | ホーム | 次のページ
シーケンス操作関数 | 上に戻る | 配列関数と演算子