MySql中的IFNULL、NULLIF和ISNULL
isnull(expr) 的用法:
如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。
1
2
3
4
|
mysql> select isnull (1+1);
-> 0 mysql> select isnull (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及其示例数据如下图所示。
2.查询要求
查询出其中成绩(score)小于等于60的学生信息保存至表变量@tempTable中,当学生成绩为空时,成绩记为0。
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
3 执行结果
————————————————————————————————————
IFNULL(expr1,expr2)的用法:
假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1;
否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。
1
2
3
4
5
6
7
8
9
|
mysql> SELECT IFNULL(1,0);
-> 1 mysql> SELECT IFNULL( NULL ,10);
-> 10 mysql> SELECT IFNULL(1/0,10);
-> 10 mysql> SELECT
IFNULL(1/0, 'yes' );
-> 'yes'
|
IFNULL(expr1,expr2)的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、 REAL或
INTEGER。假设一个基于表达式的表的情况, 或MySQL必须在内存储器中储存一个临时表中IFNULL()的返回值:
1 |
CREATE TABLE tmp SELECT IFNULL(1, 'test' ) AS test;
|
在这个例子中,测试列的类型为 CHAR(4)。
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> SELECT NULLIF (1,2);
-> 1 ‘ |
如果参数不相等,则 MySQL 两次求得的值为 expr1 。