条件式

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

# 9.13. 条件式

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

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

## 9.13.1. `CASE`

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

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

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

以下の"簡略形"`CASE`式は上に記述した一般形式からの特別な変形です。

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

The `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.13.2. `COALESCE`

    COALESCE(value [, ...])

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

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

`CASE`式同様、`COALESCE`は結果を決定するために必要でない引数を評価しません。 つまり、非NULL引数が見つかれば、その右側にある引数は評価されません。

## 9.13.3. `NULLIF`

    NULLIF(value1, value2)

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

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

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