PostgreSQLにはISNULLやNVLがないので関数で自作する

PostgreSQL には SQLServer の ISNULL や Oracle の NVL に対応する関数がないので値が NULL の場合に別の値に変換して取得するには COALESCE で代用するが多いようです。

ないなら作ってみようということで自作の ISNULL 関数を作成します。

スポンサーリンク

PostgreSQLのISNULL、NVL関数対応

PostgreSQL には ISNULL や NVL 関数に対応するものがないので、自作します。

PostgreSQL の関数はオーバーロードが可能なので、自作するには ISNULL 関数の引数の型、戻り値の型を「なんでもOK」にしてやる必要があります。

でないと integer や char などの呼び出す側での引数の型の分だけ ISNULL 関数を作らなくてはなりません。

これは無駄なので調べると PostgreSQL には anyelement 型という「なんでもOK型(正式名称は多様型)」があるのでこれを使います。

ISNULL関数作成

ISNULL 関数を作る前に準備をします。

まずはテーブル作成。

CREATE TABLE test_table
(
     name VARCHAR(20)
    ,age  smallint
)

データを挿入しておきます。

INSERT INTO test_table
    VALUES ( 'Taro',20 ),(NULL,30),('Hanako',NULL)

実際に作成する ISNULL 関数の SQL は以下の通りです。

CREATE OR REPLACE FUNCTION isNull( v1 anyelement, v2 anyelement)
RETURNS anyelement AS $$
DECLARE
    result ALIAS FOR $0 ;
BEGIN
    result := v1;
    IF v1 IS NULL THEN
        result := v2;
    END IF;

    RETURN result;
END;
$$ LANGUAGE plpgsql

第 1 引数に NULL かどうか判定する値、第 2 引数に NULL の場合に返す値を指定して呼び出します。

SELECT
     ISNULL( name, 'No name') AS name
    ,ISNULL( age, 300) AS age
FROM test_table;

上記の実行結果は以下の通りです。

Taro 20
No name 30
Hanako 300
スポンサーリンク
スポンサーリンク
SQL学習におすすめの本
PostgreSQL
スポンサーリンク
ソフトウェア開発日記
タイトルとURLをコピーしました