处理空值,把 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 函数用法)的主要内容,如果未能解决你的问题,请参考以下文章

json串中怎么把值为null的属性过滤掉

c语言中怎样给整型和字符型赋空值(NULL)

SSIS 空值问题

C#字符串空值如何转换为NULL和转换0

数据帧到 RDD[Row] 用空值替换空间

access 查询空值和null值的区别