条件式¶
CASE¶
標準SQLのCASE
式には2つの形式があります。「単純」な形式は、expression
と等しいものが見つかるまで、左から右に各value
式を検索します。
CASE expression
WHEN value THEN result
[ WHEN ... ]
[ ELSE result ]
END
一致するvalue
のresult
が返されます。一致が見つからない場合、ELSE
句の結果が、存在すれば返され、存在しなければnullが返されます。例
SELECT a,
CASE a
WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
ELSE 'many'
END
「検索」形式は、真になるまで左から右に各ブールcondition
を評価し、一致するresult
を返します。
CASE
WHEN condition THEN result
[ WHEN ... ]
[ ELSE result ]
END
条件がどれも真にならない場合、ELSE
句の結果が、存在すれば返され、存在しなければnullが返されます。例
SELECT a, b,
CASE
WHEN a = 1 THEN 'aaa'
WHEN b = 2 THEN 'bbb'
ELSE 'ccc'
END
IF¶
IF
関数は、実際には次のCASE
式に相当する言語構成です。
CASE WHEN condition THEN true_value [ ELSE false_value ] END
- if(condition, true_value)¶
condition
が真の場合、true_value
を評価して返します。それ以外の場合は、nullを返し、true_value
は評価されません。
- if(condition, true_value, false_value)¶
condition
が真の場合、true_value
を評価して返します。それ以外の場合は、false_value
を評価して返します。
COALESCE¶
- coalesce(value1, value2[, ...])¶
引数リストの最初の非nullの
value
を返します。CASE
式と同様に、引数は必要に応じてのみ評価されます。
NULLIF¶
- nullif(value1, value2)¶
value1
がvalue2
と等しい場合、nullを返します。それ以外の場合は、value1
を返します。
TRY¶
- try(expression)¶
式を評価し、
NULL
を返すことで特定の種類のエラーを処理します。
破損したデータや無効なデータが検出された場合に、クエリが失敗するのではなく、NULL
やデフォルト値を生成することを優先する場合は、TRY
関数が役立ちます。デフォルト値を指定するには、COALESCE
関数と組み合わせてTRY
関数を使用できます。
TRY
によって処理されるエラーは次のとおりです。
ゼロ除算
無効なキャスト引数または無効な関数引数
範囲外の数値
例¶
いくつかの無効なデータを含むソーステーブル
SELECT * FROM shipping;
origin_state | origin_zip | packages | total_cost
--------------+------------+----------+------------
California | 94131 | 25 | 100
California | P332a | 5 | 72
California | 94025 | 0 | 155
New Jersey | 08544 | 225 | 490
(4 rows)
TRY
を使用しない場合のクエリ失敗
SELECT CAST(origin_zip AS BIGINT) FROM shipping;
Query failed: Can not cast 'P332a' to BIGINT
TRY
を使用したNULL値
SELECT TRY(CAST(origin_zip AS BIGINT)) FROM shipping;
origin_zip
------------
94131
NULL
94025
08544
(4 rows)
TRY
を使用しない場合のクエリ失敗
SELECT total_cost / packages AS per_package FROM shipping;
Query failed: / by zero
TRY
とCOALESCE
を使用したデフォルト値
SELECT COALESCE(TRY(total_cost / packages), 0) AS per_package FROM shipping;
per_package
-------------
4
14
0
19
(4 rows)