Null 替换函数在日常统计中的应用--目录
- 前言
- 1.SqlServer中的isnull的函数
- 2.MySQL中的ifnull函数
- 3.Oracle中的nvl函数
- 4.PostgreSQL中的coalesce函数
- 小结
前言
在日常统计过程中,当表字段值存在 null 时, null 和其他值一起运算的结果也为 null,为统计工作带来了不便,比如在 MySQL 中执行 SQL 脚本:select 1+null
结果集:
为了避免统计值出现null值的情况,主流数据库都提供了替换null的函数,下面我们从四种主流数据库来了解下。
1.SqlServer中的isnull的函数
isnull函数在SQLServer中的语法:
isnull(expr01,expr02)
其中expr01代表被检查是否为null的表达式,可以为任意数据类型,expr02是在expr01为null时返回的表达式,数据类型应保持和expr01一致,最终函数的按类型与expr01相同。
下面SQL脚本将学生学习信息表中性别为null的值替换为0:
select gender,isnull(gender,0) as gender_new,sid,stu_name from student where gender is null;
结果集:
2.MySQL中的ifnull函数
MySQL中的ifnull函数可以实现实现替换null的功能,它的语法是:
IFNULL (EXPR01,VALUE)
如果第一个参数的表达式expr01为null,则返回第二个参数value,如果第一个参数不为null,则返回第一个参数值expr01,两个参数均为必须,缺一不可。
select ifnull(1,2),ifnull(null,2);
结果集:
ifnull(1,2)中由于第一个参数为1,不为null,所以返回1,ifnull(null,2)中第一个参数为null,所以返回了第二个参数2.
在MySQL中也有isnull函数,但是它的功能和SQLServer中的isnull函数的功能不同,在MySQL中isnull的用法为:
isnull(expr)
如果表达式expr为null就返回1,如果expr不为null就返回0;
select isnull(1),isnull(null);
也可以将isnull用在where子句中:
select * from student where isnull(gender);
结果集:
在上面SQL语句中isnull(gender)的作用和gender is null是一样的。
3.Oracle中的nvl函数
Oracle中的nvl函数可以实现替换null的功能,它的语法是:
nvl(expr01,expr02)
在功能上实现了SQLServer中的isnull的功能,假如我们将学生成绩表中的一条记录中的成绩字段更新为null,通过nvl函数来替换null值为0:
update elective set grade = null where id = 13;
select grade,nvl(grade,0) from elective where id=13;
结果集:
4.PostgreSQL中的coalesce函数
PostgreSQL中的coalesce函数同样可以实现医患null的功能,它的语法是:
coalesce(expr01,expr02,expr03,...)
与其他数据库不同的是,该函数可以存在一个或多个函数,返回第一个值不为null的表达式。
select coalesce(null,'替换值'),coalesce('原值','替换值'),coalesce (null,null,'替换值1','替换值2');
结果集:
小结
在表记录总存在的null值给我们的查询统计带来了很大的不变,虽然数据库提供了null替换函数,但这无可厚非是增加了编写代码的难度和成本,为了规避该问题,最好在创建表或新增列时将列设置为非null并未它设置默认值。