oracle的nvl

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle的nvl相关的知识,希望对你有一定的参考价值。

select * from a
where a.id='005' and a.row_num=2 and
nvl(a.content,'-1')=nvl('rr','-1')
这句是什么意思,尤指后面的nvl()=nvl()

oracle中,nvl函数的含义是如果某字段内容为空则把某字段设置为某某值。

如,test表中,其中id为3,4的name是空值。

现在要查询,使name为空值的内容显示为“无名”。可用如下语句:

select id,nvl(name,\'无名\') name from test;

运行后结果:

nvl函数解释:

格式为:

NVL( string1, replace_with)

功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。

注意事项:string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数进行类型转换。

参考技术A NVL ( 参数1, 参数2)

意思是, 如果 参数1 非空, 那么返回参数1。 如果参数1 为空, 返回参数2。追问

那等于号后面又是怎么回事

追答

nvl(a.content,'-1') = nvl('rr','-1')

这么写的目的, 是因为, 在数据库里面
NULL = NULL 是永远不会满足条件的。

因此, nvl(a.content,'-1')
意味着如果 a.content 不是 NULL, 那么返回 a.content, 如果是 NULL, 那么返回 '-1'

后面的那个 nvl('rr','-1') 也是一样的道理。
不过这个 已经写成了 'rr', 'rr' 明显不是 NULL, 因此写 nvl('rr','-1') 没有什么意义。

一般情况下, 是2个都是数据库里面的一列的情况下, 用这种写法。

例如:
nvl(a.content, '-1') = nvl( a.content2 , '-1')

追问

我遇到的情况是在数据库中a.content的值为‘rr’,现在它这句作为一个where条件到底是什么意思

追答

如果你 数据库中a.content的值, 全部都为‘rr’。

那么 nvl(a.content, '-1') 就是全部返回 a.content, 也就是 返回 'rr'

nvl('rr','-1') 肯定返回 'rr'

那么
select * from a
where a.id='005' and a.row_num=2 and
nvl(a.content,'-1')=nvl('rr','-1')

就相当于

select * from a
where a.id='005' and a.row_num=2 and
a.content = 'rr'

本回答被提问者采纳
参考技术B oracle中对于nvl有如下用法:
【语法】NVL (expr1, expr2)
【功能】若expr1为NULL,返回expr2;expr1不为NULL,返回expr1。
注意两者的类型要一致

【语法】NVL2 (expr1, expr2, expr3)
【功能】expr1不为NULL,返回expr2;expr2为NULL,返回expr3。
expr2和expr3类型不同的话,expr3会转换为expr2的类型

oracle中nvl()函数

oracle中nvl()函数 
oracle的nvl函数的使用方法


通过查询获得某个字段的合计值,假设这个值位null将给出一个预设的默认值 
select nvl(sum(t.dwxhl),1) from tb_jhde t where zydm=-1
这里关心的nvl的使用方法,nvl(arg,value)代表假设前面的arg的值为null那么返回的值为后面的value 
如: NVL(a,b)就是推断a是否是NULL,假设不是返回a的值。假设是返回b的值 通过查询获得某个字段的合计值,假设这个值位null将给出一个预设的默认值


还有一个有关的实用方法 
declare 
i integer 
select nvl(sum(t.dwxhl),1) into i from tb_jhde t where zydm=-1
这样就能够把获得的合计值存储到变量i中。假设查询的值为null就把它的值设置为默认的1


Oracle下Nvl函数 nvl( ) 函数 从两个表达式返回一个非 null 值。 
语法 
NVL(eExpression1, eExpression2) 
參数 
eExpression1, eExpression2 
如 果 eExpression1 的计算结果为 null 值。则 NVL( ) 返回 eExpression2。假设 eExpression1 的计算结果不是 null 值。则返回 eExpression1。eExpression1 和 eExpression2 能够是随意一种数据类型。假设 eExpression1 与 eExpression2 的结果皆为 null 值,则 NVL( ) 返回 .NULL.。

 
返回值类型 
字符型、日期型、日期时间型、数值型、货币型、逻辑型或 null 值 
说明 
在不支持 null 值或 null 值无关紧要的情况下,能够使用 NVL( ) 来移去计算或操作中的 null 值。

select nvl(a.name,‘空得‘) as name from student a join school b on a.ID=b.ID 注意:两个參数得类型要匹配 问:什么是NULL? 答:在我们不知道详细有什么数据的时候,也即未知,能够用NULL, 我们称它为空,ORACLE中,含有空值的表列长度为零。
ORACLE同意不论什么一种数据类型的字段为空。除了下面两种情况:




























以上是关于oracle的nvl的主要内容,如果未能解决你的问题,请参考以下文章

oracle的数据怎么发送到接口

什么是oracle的实例

oracle 是怎么收费的?

windows安装oracle76%卡了

ORACLE 官方只可以下载oracle11g 版本的数据库 没有了ORACLE 10g 是否ORACLE 10g 过期了 不能在官方下载

oracle 安装