nvl、nvl2、nullif、coalesce函数的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nvl、nvl2、nullif、coalesce函数的区别相关的知识,希望对你有一定的参考价值。
参考技术A NVL函数的格式如下:NVL(expr1,expr2)含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。
例如:
SQL> select ename,NVL(comm, -1) from emp;
NVL2函数的格式如下:NVL2(expr1,expr2, expr3)
含义是:如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。SQL> select ename,NVL2(comm,-1,1) from emp;
NULLIF(exp1,expr2)函数的作用是如果exp1和exp2相等则返回空(NULL),否则返回第一个值。
下面是一个例子。使用的是oracle中HR schema,如果HR处于锁定,请启用
这里的作用是显示出那些换过工作的人员原工作,现工作。
SQL> SELECT e.last_name, e.job_id,j.job_id,NULLIF(e.job_id, j.job_id) “Old Job ID”
FROM employees e, job_history j
WHERE e.employee_id = j.employee_id
ORDER BY last_name;
Coalese函数的作用是的NVL的函数有点相似,其优势是有更多的选项。
格式如下:
Coalesce(expr1, expr2, expr3….. exprn)
表示可以指定多个表达式的占位符。所有表达式必须是相同类型,或者可以隐性转换为相同的类型。
返回表达式中第一个非空表达式,如有以下语句: SELECT COALESCE(NULL,NULL,3,4,5) FROM dual 其返回结果为:3
如果所有自变量均为 NULL,则 COALESCE 返回 NULL 值。 COALESCE(expression1,...n) 与此 CASE 函数等价:
这个函数实际上是NVL的循环使用,在此就不举例子了。
oracle函数NVL,NVL2和NULLIF之间的区别和使用
oracle用这么几个函数,可以帮助我们解决数据上null或0的处理
1、NVL()函数
1.1)介绍:NVL(expr1,expr2),若expr1为null, 返回expr2; 不为null,返回expr1。 注意:两者类型要一致
1.2)用法:
--expr1为空,返回expr2,结果:\'未知\'-- select NVL(null,\'未知\') SexType from dual; --expr1不为空,返回expr1, 结果:1 -- select NVL(\'1\',\'2\') SexType from dual;
1.3)实际应用:
如:我们查询表数据出现这种结果,某个字段若为null,返回0
--未加函数时情况 --
select A.UseFlag 使用标志,A.NAME 单据名称 from Dxc_Receive_Notice A
若字段不为null,直接返回字段本身
--加函数时情况,要求(field 为null,返回0 ;field 不为null,返回本身) --
select NVL(A.UseFlag,\'0\') 使用标志,A.NAME 单据名称 from Dxc_Receive_Notice A
2、NVL2 函数
2.1)介绍:NVL2 (expr1, expr2, expr3),若expr1不为NULL,返回expr2 ;为NULL,返回expr3。注意:expr2 和expr3 类型不同的话,expr3 会转换为expr2 的类型
2.2)用法:
--不为null时,返回expr2 ,结果:1 select NVL2(0,1,2) from dual; --为null时,返回expr3 ,结果:2 select NVL2(null,1,2) from dual;
2.3)实际应用
将查询结果中字段若为null,返回0
--未加函数时情况 --
select A.UseFlag 使用标志,A.NAME 单据名称 from Dxc_Receive_Notice A
若字段不为null,直接返回字段本身
--应用到实际查询中,要求(field 为null,返回0; field 不为null,返回本身) select NVL2(A.UseFlag,A.UseFlag,\'0\') 使用标志,A.NAME 单据名称 from Dxc_Receive_Notice A
3、NULLIF函数
3.1)介绍:NULLIF (expr1, expr2),若expr1和expr2相等,返回NULL;不相等,等返回expr1
3.2)用法:
--相等时,返回结果: null -- select NULLIF(1,1) from dual; --不相等时,返回结果: 1 -- select NULLIF(1,2) from dual;
3.3)实际应用
将查询结果中字段为‘0001/1/1’,返回null
--未加函数查询结果 要求(将日期类型默认\'0001/1/1\',改成null,不相等,返回本身日期)--- select A.RECEIVEDATE 收货日期,A.NAME 单据名称 from Dxc_Receive_Notice A
若字段不为‘‘0001/1/1’,返回字段本身
--添加函数查询结果,要求(将日期类型默认\'0001/1/1\',改成null,不相等,返回本身日期)-- select NULLIF(A.RECEIVEDATE,TO_DATE(\'0001/1/1\',\'yyyy-mm-dd hh24:mi:ss\')) 收货日期,A.NAME 单据名称 from Dxc_Receive_Notice A
以上是关于nvl、nvl2、nullif、coalesce函数的区别的主要内容,如果未能解决你的问题,请参考以下文章
Oracle中的NVL,NVL2,NULLIF,COALESCE函数