NVL、NVL2、COALESCE関数
DECODE関数
OracleのDECODE関数(リスト8)は、列の値によって返す値を変えることができる便利な関数です。PostgreSQLには等価な働きをするCASE文(リスト9)があるので【注2】、それに変更します。
SELECT 担当者名,
DECODE( 性別,
0, '女性',
1, '男性',
NULL ) "性別"
FROM 担当者マスタ
ORDER BY 担当者名; SELECT 担当者名,
CASE 性別
WHEN 0 THEN '女性'
WHEN 1 THEN '男性'
ELSE NULL
END AS "性別"
FROM 担当者マスタ
ORDER BY 担当者名;
図14は実行結果です。
| 担当者名 | | | 性別 |
| ---------- | + | ------ |
| 伊藤 | | | 女性 |
| 宇賀神 | | | 男性 |
| 岡田 | | | 男性 |
| 佐瀬 | | | 男性 |
| 斎藤 | | | 男性 |
| 小野 | | | 男性 |
| 小林 | | | 女性 |
| 藤本 | | | 男性 |
| 鈴木 | | | 男性 |
| (9 rows) | ||
NVL、NVL2、COALESCE関数
Oracleには、最初のNULLでない値を返す、便利なNVL関数があります。
SELECT 商品名, NVL( 卸単価, 0 ) "卸単価"
FROM 商品マスタ;
PostgreSQLにも等価な機能を持つCOALESCE関数がありますので、それに変更します。COALESCE関数【注3】は可変個の引数を取りますので、OracleのNVL2関数も同様に変更できます。
※注3: Oracle 9iからはCOALESCE関数が使えます。
![]()
SELECT 商品名, COALESCE( 卸単価, 0 )
AS "卸単価" FROM 商品マスタ;
図15は実行結果です。
| 商品名 | | | 卸単価 |
| ------------------------ | + | -------- |
| デスクトップ型パソコン | | | 180000 |
| ノート型パソコン | | | 270000 |
| 17型_ディスプレイ | | | 50000 |
| 19型_ディスプレイ | | | 95000 |
| 15型_液晶ディスプレイ | | | 120000 |
| デジタルカメラ | | | 0 |
| プリンタ | | | 25000 |
| スキャナ | | | 30000 |
| HUB | | | 7000 |
| ターミナルアダプタ | | | 20000 |
| (10 rows) | ||