天天看點

Oracle的NVL()函數和MySQL中的IfNull()函數

MS SQL 中的IsNull()函數:

IsNull ( check_expression , replacement_expression )

check_expression: 可以是任何類型,将要檢查的表達式  不為空,傳回它

replacement_expression: 類型必須和check_expression相同,check_expression為null,傳回它

這個函數的作用就是:判斷check_expression是否為空,為空就傳回replacement_expression,不為空則傳回check_expression

eg:

SELECT IsNull(null,1)  傳回1

SELECT IsNull(null,’男') 傳回男

SELECT IsNull(‘’,'男') 注意傳回的不是男哦

MS Sql中的 IsNull( )函數相當于Oracle中的 NVL( )函數:

NVL(EXP1,EXP2),函數傳回exp1和exp2 中第一個不為null的值。

如果exp1為空就傳回exp2,否則傳回exp1。

相當于Mysql中的IfNull()函數:

應用場景:比如一張表:Products ,該表取自 http://www.w3schools.com/SQL/sql_isnull.asp

P_Id ProductName UnitPrice UnitsInStock UnitsOnOrder
1 Jarlsberg 10.45 16 15
2 Mascarpone 32.56 23
3 Gorgonzola 15.67 9 20

假設UnitsOnOrder這一列是可以為空的,可能含有空值,那麼執行

SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder) FROM Products 有可能會出錯

因為UnitsOnOrder這一列為空的時候,運算的結果就是空

mssql的isnull()函數可以指定處理空值的方式:

改為下面得就可以了SELECT ProductName,UnitPrice*(UnitsInStock+isnull(UnitsOnOrder,0)) FROM Products

isnull(unitsOnOrder,0) unitsOnOrder為空的時候傳回0

COALESCE() function

COALESCE ( expression [ ,...n ] )

相當于:

COALESCE(expression1,...n) 的功能與以下 CASE 表達式相同:

CASE

   WHEN (expression1 IS NOT NULL) THEN expression1

   WHEN (expression2 IS NOT NULL) THEN expression2

   ...

   ELSE expressionN

END