9.13.1. CASE
SQL CASE式は、他の言語におけるif/else文と同様に、一般的な条件式です。
CASE WHEN condition THEN result END
CASE 節は式が有効であればどこでも使用することができます。 もし結果が真であれば、CASE式の値は条件に続く結果となります。 もし結果がfalseであれば、それ以降のWHEN句は同じように検索されます。 WHEN条件が真でない場合、case式の値はELSE句の結果となります。 ELSE句が省略され、条件が一致しない場合、結果はnullです。
例:
SELECT * FROM test; a--- 1 2 3SELECT 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
すべての結果式のデータ型は、単一の出力型に変換可能である必要があります。
次の “単純な “CASE式は、上記の一般的な形式の特殊化した変形です:
CASE expression WHEN value THEN result END
式は計算され、等しいものが見つかるまでWHEN句のすべての値指定と比較されます。 一致するものが見つからない場合、ELSE句の結果(または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式は、結果を決定するために必要ない下位式は評価されません。 たとえば、これはゼロ除算の失敗を避けるために可能な方法です:
SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;