PostgreSQLにおけるISNULL()の等価関数とNULL値処理の代替方法
PostgreSQLにおけるISNULL()の等価関数
SQL ServerのISNULL()
関数は、指定された値がNULLの場合に代替値を返します。PostgreSQLには直接的な等価関数はありませんが、同様の機能を実現するために以下の方法を使用できます。
COALESCE関数
最も一般的な方法です。複数の値を指定し、最初のNULLでない値を返します。
COALESCE(column_name, alternative_value)
例:
SELECT COALESCE(name, 'Unknown') AS name FROM customers;
CASE式
条件に基づいて異なる値を返します。
CASE WHEN column_name IS NULL THEN alternative_value ELSE column_name END
SELECT CASE WHEN name IS NULL THEN 'Unknown' ELSE name END AS name FROM customers;
CASE式(簡略形)
条件が真の場合に値を返す簡略形です。
CASE column_name WHEN NULL THEN alternative_value ELSE column_name END
SELECT CASE name WHEN NULL THEN 'Unknown' ELSE name END AS name FROM customers;
PostgreSQLでのNULL値処理の例
ISNULL()の等価関数
SELECT COALESCE(name, 'Unknown') AS name FROM customers;
COALESCE(name, 'Unknown')
:name
がNULLの場合、'Unknown'を返します。
SELECT CASE WHEN name IS NULL THEN 'Unknown' ELSE name END AS name FROM customers;
CASE WHEN name IS NULL THEN 'Unknown' ELSE name END
:name
がNULLの場合、'Unknown'を返します。
SELECT CASE name WHEN NULL THEN 'Unknown' ELSE name END AS name FROM customers;
NULL値の比較と処理
SELECT * FROM customers WHERE name IS NULL; -- NULL値のレコードを抽出
SELECT * FROM customers WHERE name IS NOT NULL; -- NULL値ではないレコードを抽出
-- NULL値を文字列に変換
SELECT COALESCE(name, '') AS name_string FROM customers;
-- NULL値を数値に変換
SELECT COALESCE(age, 0) AS age_number FROM customers;
-- NULL値をデフォルト値に置き換える
UPDATE customers SET name = 'Unknown' WHERE name IS NULL;
-- NULL値を無視した合計
SELECT SUM(age) FROM customers;
-- NULL値を含む合計
SELECT SUM(COALESCE(age, 0)) FROM customers;
-- NULL値を無視した平均
SELECT AVG(age) FROM customers;
-- NULL値を含む平均
SELECT AVG(COALESCE(age, 0)) FROM customers;
PostgreSQLにおけるISNULL()の等価関数とNULL値処理の代替方法
CASE式(さらに簡略化)
SELECT IFNULL(name, 'Unknown') AS name FROM customers;
GREATEST関数(複数の値から最大値)
SELECT GREATEST(name, 'Unknown') AS name FROM customers;
GREATEST(name, 'Unknown')
:name
と'Unknown'のうち、NULLでない最大の値を返します。
NVL関数(Oracle互換)
SELECT NVL(name, 'Unknown') AS name FROM customers;
COALESCE関数(複数の値から最初のNULLでない値)
SELECT COALESCE(name, 'Unknown', 'Default') AS name FROM customers;
COALESCE(name, 'Unknown', 'Default')
:name
がNULLの場合、'Unknown'を返します。さらに、'Unknown'もNULLであれば、'Default'を返します。
CASE式(条件に基づく複数の値)
SELECT CASE WHEN name IS NULL THEN
CASE WHEN age IS NULL THEN 'Unknown' ELSE 'Default' END
ELSE name END AS name FROM customers;
CASE WHEN name IS NULL THEN ... ELSE name END
:name
がNULLの場合、age
がNULLであれば'Unknown'を、そうでなければ'Default'を返します。
sql-server postgresql null