TOP

SQL NULL 函数

SQL 函数 IFNULL()、ISNULL()、COALESCE() 和 NVL()


让我们看一下下表“Products”(“产品”):

ProductIDProductNameSupplierIDCategoryIDUnitPrice
1Chais1110 boxes x 20 bags18.00
2Chang1124 - 12 oz bottles19.00
3Aniseed Syrup1212 - 550 ml bottles10.00
4Chef Anton's Cajun Seasoning2248 - 6 oz jars22.00
5Chef Anton's Gumbo Mix2236 boxes21.35

假设列“UnitsOnOrder”是可选的并且可以包含值NULL。

考虑以下指令 SELECT:

SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)
FROM Products

在上面的示例中,如果任何“UnitsOnOrder”值等于NULL,则结果将为NULL。

决定

MySQL

如果表达式等于 NULL,则 MySQL IFNULL() 函数允许您返回替代值:

SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products

或者我们可以使用 COALESCE() 函数,例如:

SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products

SQL Server

如果表达式的值为 NULL,则 SQL Server ISNULL() 函数允许您返回替代值:

SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products

或者我们可以使用 COALESCE() 函数,例如:

SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products

MS Access

如果表达式为空,MS Access 函数 IsNull() 返回 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