SQL NULL 関数
SQL ISNULL()、NVL()、IFNULL()、COALESCE()関数
以下の「Products」テーブルを見てください:
P_Id | ProductName | UnitPrice | UnitsInStock | UnitsOnOrder |
---|---|---|---|---|
1 | コンピュータ | 699 | 25 | 15 |
2 | プリンター | 365 | 36 | |
3 | 電話 | 280 | 159 | 57 |
「UnitsOnOrder」がオプションでありNULL値を含むことができる場合。
以下のSELECT文を使用しています:
SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder) FROM Products
上記の例では、"UnitsOnOrder" の値が NULL である場合、結果は NULL になります。
マイクロソフトの ISNULL() 関数は NULL 値の処理方法を指定します。
NVL(), IFNULL(), COALESCE() 関数も同じ結果を得ることができます。
ここでは、NULL 値が 0 に設定したいです。
ここでは、"UnitsOnOrder" が NULL である場合、計算に不都合が生じるため、NULL の値が 0 に設定されます。
SQL Server / MS Access
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0)) FROM Products
Oracle
Oracle には ISNULL() 関数はありませんが、同じ結果を得るために NVL() 関数を使用できます:
SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0)) FROM Products
MySQL
MySQL には ISNULL() 関数もあり、ただし、マイクロソフトの ISNULL() 関数とは少し異なります。
MySQL では、IFNULL() 関数を使用してこんな感じで:
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0)) FROM Products
または、COALESCE() 関数を使用してこんな感じで:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0)) FROM Products