MySql中的IFNULL、NULLIF和ISNULL

isnull(expr) 的用法:

如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。

1
2
3
4
mysql>selectisnull(1+1);
-> 0
mysql>selectisnull(1/0);
-> 1

使用= 的null 值对比通常是错误的。

isnull() 函数同 is null比较操作符具有一些相同的特性。请参见有关is null 的说明。

————————————————————————————————————

ISNULL

   使用指定的替换值替换 NULL。
语法
      :ISNULL ( check_expression , replacement_value )
参数
   check_expression  将被检查是否为 NULL的表达式。如果不为NULL,这直接返回 该值,也就是 check_expression 这个表达式。如果为空这个直接返回 replacement_value这个表达的内容。。。。check_expression 可以是任何类型的
replacement_value
在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。
返回类型
       返回与 check_expression 相同的类型。
注释
如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value
示例
1 示例数据
表tb_Student及其示例数据如下图所示。
MySql中的IFNULL、NULLIF和ISNULL
 
2.查询要求
   查询出其中成绩(score)小于等于60的学生信息保存至表变量@tempTable中,当学生成绩为空时,成绩记为0。
MySql中的IFNULL、NULLIF和ISNULL
1 declare @tempTable table(  
2     stuname nchar(10),  
3     stuage int,   
4      stuscore float);  
5 insert into @tempTable  
6 select name,age,ISNULL(score,0) from tb_Student  
7 where  ISNULL(score,0)<=60  
8 select * from @tempTable  
MySql中的IFNULL、NULLIF和ISNULL

3 执行结果

MySql中的IFNULL、NULLIF和ISNULL


————————————————————————————————————

IFNULL(expr1,expr2)的用法:

假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1;

否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

1
2
3
4
5
6
7
8
9
mysql>SELECTIFNULL(1,0);
-> 1
mysql>SELECTIFNULL(NULL,10);
-> 10
mysql>SELECTIFNULL(1/0,10);
-> 10
mysql>SELECT
IFNULL(1/0,'yes');
->'yes'

IFNULL(expr1,expr2)的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、 REAL或 
INTEGER。假设一个基于表达式的表的情况, 或MySQL必须在内存储器中储存一个临时表中IFNULL()的返回值:

1
CREATETABLE tmp SELECTIFNULL(1,'test')AStest;

在这个例子中,测试列的类型为 CHAR(4)。

MySql中的IFNULL、NULLIF和ISNULL


MySql中的IFNULL、NULLIF和ISNULL

MySql中的IFNULL、NULLIF和ISNULL

NULLIF(expr1,expr2) 的用法:

如果expr1 

= expr2 成立,那么返回值为NULL,否则返回值为 expr1。这和CASE WHEN expr1 = expr2 
THEN NULL ELSE expr1 END相同。

1
2
3
4
5
mysql>SELECT
NULLIF(1,1);
->NULL
mysql>SELECTNULLIF(1,2);
-> 1 ‘

如果参数不相等,则 MySQL 两次求得的值为 expr1 。