無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

9.17. 条件式

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

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

9.17.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;

注意: 項35.6 にて説明したとおり、 IMMUTABLE と指摘された関数と引数は、それが実行される時点ではなく問い合わせが計画された時点で評価されます。 このことが意味するのは、問い合わせ実行時点で評価されない副文脈の一定部分が問い合わせ計画の期間でも未だに評価され続けるということです。

9.17.2. COALESCE


COALESCE
(

value

 [
, ...
])

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

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

これは description がNULLでなければをそれ返します。そうでない場合(NULLの場合)は、 short_description がNULLでなければそれを返します。そうでもない場合は (none) が帰ります。

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

9.17.3. NULLIF


NULLIF
(

value1

, 

value2

)

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

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

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

9.17.4. GREATEST および LEAST


GREATEST
(

value

 [
, ...
])

LEAST
(

value

 [
, ...
])

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

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


powered by SEO.CUG.NET