SQL NULL 関数
SQL NULL 関数
SQL IFNULL(), ISNULL(), COALESCE(), および NVL() 関数を見ていきます。
“Products” テーブルを見てみましょう:
P_Id | ProductName | UnitPrice | UnitsInStock | UnitsOnOrder |
---|---|---|---|---|
1 | Jarlsberg | 10.45 | 16 | 15 |
2 | Mascarpone | 32.56 | 23 | |
3 | Gorgonzola | 15.67 | 9 | 20 |
“UnitsOnOrder” 列はオプショナルで、NULL 値を含むことがあります。
以下の SELECT 文を見てみましょう:
SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)
FROM Products;
上記の例では、”UnitsOnOrder” の値が NULL の場合、結果も NULL になります。
解決策
MySQL
MySQL の IFNULL() 関数を使用して、式が NULL の場合に代替値を返します:
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products;
または COALESCE() 関数を使用することもできます:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;
SQL Server
SQL Server の ISNULL() 関数を使用して、式が NULL の場合に代替値を返します:
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products;
または COALESCE() 関数を使用することもできます:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;
MS Access
MS Access の IsNull() 関数は、式が 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;