SQL NULL関数
SQL IFNULL()、ISNULL()、COALESCE()、およびNVL()関数
次の「製品」表を見てください。
|
P_ID |
商品名 |
単価 |
在庫数 |
注文単位 |
|---|---|---|---|---|
| 1 | ヤールスベルク | 10.45 | 16 | 15 |
| 2 | マスカルポーネ | 32.56 | 23 | |
| 3 | ゴルゴンゾーラ | 15.67 | 9 | 20 |
「注文単位」列はオプションで、NULL値が含まれている可能性があるとします。
次のSELECTステートメントを見てください。
SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)
FROM Products;
上記の例では、「注文単位」値のいずれかがNULLの場合、結果はNULLになります。
ソリューション
MySQL
MySQLIFNULL()関数を使用すると、式がNULLの場合に代替値を返すことができます。
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products;
または、COALESCE()関数、次のように
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;
SQLサーバー
SQLサーバーISNULL()関数を使用すると、式がNULLの場合に代替値を返すことができます。
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products;
または、COALESCE()関数、次のように
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;
MS Access
MS AccessIsNull()関数は、式がnull値の場合はTRUE(-1)を返し、それ以外の場合はFALSE(0)を返します。
SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder))
FROM Products;
Oracle
Oracle NVL()関数は同じ結果を達成します。
SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0))
FROM Products;
または、COALESCE()関数、次のように
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;