处理空值,把 Null 值转换为实际值(coalesce,nvl 函数用法)
Posted youngxuebo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理空值,把 Null 值转换为实际值(coalesce,nvl 函数用法)相关的知识,希望对你有一定的参考价值。
问题:
有一些字段包含了 Null 值,但是需要在程序报表中或者在数据库返回结果中将其替换为非 Null 值。
解决方式:
需要为 COALESCE 函数指定一个或这多个参数。该函数会返回参数列表里的第一个非Null值。
则使用COALESCE函数将 Null 值替代为实际的值。若 comm 不为 Null,会返回 comm 值,否则将 comm 替代为 0,返回 0。
select coalesce(comm,0)
from emp
COALESCE 函数用法:
两种用法:
1.COALESCE ( expression1, expression2);
如果 expression1 为 null,则返回 expression2 的值。
2.COALESCE ( expression,value1,value2……,valuen);
可以包含n个表达式,表示如果第一个参数 expression 不为空则取第一个 value1 ,否则判断下一个,以此类推,如果全部为空,则返回null值。
select coalesce(null,2,3) from dual;
--查询返回值为 2
select coalesce(null,null,3) from dual;
--查询返回值为 3
select coalesce(null,1,null) from dual;
--查询返回值为 1
select coalesce(1,2,3) from dual;
--查询返回值为 1
select coalesce(null,null,null,null) from dual;
--查询返回值为 Null
select coalesce(null,null,null,null,null,null,1) from dual;
--查询返回值为 1
--从以上例子不难看出,如果第一个参数,为null,则会判断下一个,一次类推,直到不为空位置,则返回该参数的值。
--如果传入的参数所有都是null,则返回null。
其他解:
在实际应用中,COALESCE 函数使用于所有的数据库。除此之外,还有 case when 也适用于所有数据库。
当然还有NVL(Oracle),IFNULL(mysql)处理 Null 值。下面将逐一介绍其用法。
(1) case when 处理 Null 值 (适用所有数据库):
select case
when comm is not null then comm
else 0
end
from emp
(2) NVL 处理 Null 值 (适用于 Oracle):
① NVL(expr1,expr2):如果表达式 exp1 为空则返回exp2 表达式,如果 exp1 表达式不为空则返回 exp1 表达式。
- 对数字型:nvl(comm,0)
- 对字符型:nvl(TO_CHAR(comm),‘No Commission’)
- 对日期型: nvl(operatedate,TO_DATE(‘2008-08-08’, ‘YYYY-MM-DD HH24:MI:SS’))
② NVL2(expr1,expr2,expr3):如果表达式 exp1 为空,返回值为表达式 exp3 的值。如果表达式 exp1 不为空,返回值为表达式 exp2 的值。
举例: NVL2(comm,sal+comm,sal),如果comm为空,就返回sal 的值。如果 comm 不为空(null),就返回表达式 sal+comm的值。
select nvl2(1,2,3) from dual;
--结果集为 2
select nvl2(null,2,3) from dual;
--结果集为 3
select nvl2(1,null,3) from dual;
--结果集为 null
select nvl2(null,2,null) from dual;
--结果集为 null
③ NULLIF(expr1,expr2):如果exp1和exp2相等则返回空(NULL),否则返回第一个值。
SELECT NULLIF(1,2) FROM DUAL
--结果集为 1
SELECT NULLIF(2,2) FROM DUAL
--结果集为 2
SELECT NULLIF('HA','MR') FROM DUAL
--结果集为 HA
SELECT NULLIF('MR','MR') FROM DUAL
--结果集为 null
(3) IFNULL 处理 Null 值 (适用于 MySql):
**IFNULL(expr1,expr2) :**如果表达式 exp1 为空则返回exp2 表达式,如果 exp1 表达式不为空则返回 exp1 表达式。
select favorite_color,IFNULL(favorite_color,'red')
from people_users
以上是关于处理空值,把 Null 值转换为实际值(coalesce,nvl 函数用法)的主要内容,如果未能解决你的问题,请参考以下文章