天天看点

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