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为空值的内容显示为“无名”。可用如下语句:
运行后结果:
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'
【语法】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函数的使用方法
通过查询获得某个字段的合计值,假设这个值位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 官方只可以下载oracle11g 版本的数据库 没有了ORACLE 10g 是否ORACLE 10g 过期了 不能在官方下载