最新的Web開發教程
 

SQL空函數


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