SQL ISNULL() NVL() IFNULL()和COALESCE()函数
请看下面的"Products"表:
P_ID | 产品名称 | 单价 | 库存量 | UnitsOnOrder |
---|---|---|---|---|
1 | 亚尔斯贝格 | 10.45 | 16 | 15 |
2 | 马斯卡 | 32.56 | 23 | |
3 | 戈贡佐拉 | 15.67 | 9 | 20 |
假设"UnitsOnOrder"列是可选的,并且可以包含NULL值。
我们有以下的SELECT语句:
SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
在上面的例子中,如果有任何的"UnitsOnOrder"值是NULL,则结果为NULL。
微软的ISNULL()函数是用来指定我们要如何对待NULL值。
所述NVL() IFNULL()和COALESCE()函数也可以用来达到相同的结果。
在这种情况下,我们希望NULL值为零。
下面,如果"UnitsOnOrder"为NULL它不会损害计算,因为ISNULL()返回零如果该值为NULL:
MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+IIF(ISNULL(UnitsOnOrder),0,UnitsOnOrder))
FROM Products
SQL Server
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