`

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允许任何一种数据类型的字段为空,除了以下两种情况:

1、主键字段(primary key),

2、定义时已经加了NOT NULL限制条件的字段

说明:

1、等价于没有任何值、是未知数。

2、NULL与0、空字符串、空格都不同。

3、对空值做加、减、乘、除等运算操作,结果仍为空。

4、NULL的处理使用NVL函数。

5、比较时使用关键字用“is null”和“is not null”。

6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来, count(*)中,用nvl(列名,0)处理后再查。

7、排序时比其他数据都大(索引默认是降序排列,小→大), 所以NULL值总是排在最后。
使用方法: 
SQL> select 1 from dual where null=null; 没有查到记录 
SQL> select 1 from dual where null=''; 没有查到记录 
SQL> select 1 from dual where ''=''; 没有查到记录 
SQL> select 1 from dual where null is null; 1 --------- 1 
SQL> select 1 from dual where nvl(null,0)=nvl(null,0); 1 --------- 1 
对空值做加、减、乘、除等运算操作,结果仍为空。 
SQL> select 1+null from dual; 
SQL> select 1-null from dual; 
SQL> select 1*null from dual; 
SQL> select 1/null from dual; 查询到一个记录. 注:这个记录就是SQL语句中的那个null 设置某些列为空值 update table1 set 列1=NULL where 列1 is not null; 
现有一个商品销售表sale

表结构为: month  char(6)  --月份 sellnumber(10,2) --月销售金额

create table sale (month char(6),sell number);
insert into sale values('200001',1000);
insert into sale values('200002',1100);
insert into sale values('200003',1200);
insert into sale values('200004',1300);
insert into sale values('200005',1400);
insert into sale values('200006',1500);
insert into sale values('200007',1600);
insert into sale values('200101',1100);
insert into sale values('200202',1200);
insert into sale values('200301',1300);
insert into sale values('200008',1000);
insert into sale(month) values('200009'); (注意:这条记录的sell值为空) 
SQL> select * from sale where sell like '%';

MONTH        SELL
------ ----------
200001       1000
200002       1100
200003       1200
200004       1300
200005       1400
200006       1500
200007       1600
200101       1100
200202       1200
200301       1300
200008       1000

11 rows selected.
查询到11记录. 结果说明: 查询结果说明此SQL语句查询不出列值为NULL的字段 此时需对字段为NULL的情况另外处理。 

SQL> select * from sale where sell like '%' or sell is null;
SQL> select * from sale where NVL(sell, 0) like '%';

MONTH        SELL
------ ----------
200001       1000
200002       1100
200003       1200
200004       1300
200005       1400
200006       1500
200007       1600
200101       1100
200202       1200
200301       1300
200008       1000

MONTH        SELL
------ ----------
200009

12 rows selected.

Oracle的空值就是这么的用法,我们最好熟悉它的约定,以防查出的结果不正确
分享到:
评论

相关推荐

    浅谈mysql可有类似oracle的nvl的函数

    ifnull等同于oracle的nvl,用法如下 mysql> select ifnull(1,10); +————–+ | ifnull(1,10) | +————–+ | 1 | +————–+ 1 row in set (0.00 sec) mysql> select ifnull(null,10); +—————–+ | ...

    Oracle中的INSTR,NVL和SUBSTR函数的用法详解

    Oracle中INSTR的用法: INSTR方法的格式为 INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号) 返回找到的位置,如果找不到则返回0. 例如:INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符...

    Oracle存储过程和存储函数创建方法(详解)

    select * from emp; —————–存储过程———————— –定义  create[or replace] procedure 存储过程名称(参数名 [in]/out 数据类型)  is/as  begin –逻辑表达式  ...select sal*12+nvl(comm,0) in

    Oracle_Database_11g完全参考手册.part2/3

    9.3.3 NVL:空值置换函数 9.3.4 ABS:绝对值函数 9.3.5 CEIL 9.3.6 FL00R 9.3.7 MOD 9.3.8 POWER 9.3.9 SQRT:求平方根 9.3.1 0EXP、LN和LOG 9.3.1 1ROUND和TRUNC 9.3.1 2SIGN 9.3.1 3SIN、SINH、COS、COSH、TAN、...

    Oracle_Database_11g完全参考手册.part3/3

    9.3.3 NVL:空值置换函数 9.3.4 ABS:绝对值函数 9.3.5 CEIL 9.3.6 FL00R 9.3.7 MOD 9.3.8 POWER 9.3.9 SQRT:求平方根 9.3.1 0EXP、LN和LOG 9.3.1 1ROUND和TRUNC 9.3.1 2SIGN 9.3.1 3SIN、SINH、COS、COSH、TAN、...

    Oracle数据库中对null值的排序及mull与空字符串的区别

    order by排序之null值处理方法 在对业务数据排序时候,发现有些字段的记录是null值,这时排序便...1、使用nvl函数 语法:Nvl(expr1, expr2)  若EXPR1是NULL,則返回EXPR2,否則返回EXPR1. SELECT NAME,NVL(TO_CHAR(CO

    最全的oracle常用命令大全.txt

    下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 1、用户 查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_...

    Oracle8i_9i数据库基础

    第一部分 Oracle SQL*PLUS基础 23 第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24...

    oracle数据库经典题目

    2.如果一个服务器进程非正常终止,Oracle系统将使用下列哪一个进程来释放它所占用的资源?( D ) A.DBWR B.LGWR C. SMON D.PMON 3. 如果要查询数据库中所有表的信息,应当使用下列哪种数据字典视图?( A ) A. ...

    orcale常用命令

    下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 1、用户 查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_...

    2009达内SQL学习笔记

    加入注释是一个使用函数的好习惯。 大多数SQL实现支持以下类型的函数: 文本处理, 算术运算, 日期和时间, 数值处理。 Null:空值 空值当成无穷大处理,所有空值参与的运算皆为空。 空值与空值并不相等,因为...

    ORCALE语句大全

    这种方式比默认的常规方式速度要快,当数据量大时,可以考虑使用这样的方法。 这时需要数据库的字符集要与客户端字符集完全一致,否则会报错 恢复(多表多文件加上大括号) 导入整个数据库 imp userid=system...

    精髓Oralcle讲课笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...

    SQL培训第一期

    1 SQL基础 1.1 基本概念 结构化查询语言(Structured Query ...select后面出现的列,如果没有使用集合函数,必须出现在group by 中。 select sno,sname,sum(grade) from student group by sno,sname; //合法写法 select...

Global site tag (gtag.js) - Google Analytics