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