最新的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