转至:http://www.th7.cn/db/Oracle/201501/86125.shtml

oracle 通过 nvl( )函数sql 查询时为 空值 赋默认值

oracle 函数介绍之nvl

  函数声明:nvl(col,val)

  说明:当col为空时取val作为返回值,当col不为空时取col值。

 
 用处:最主要的是格式化数据,比如计算金额时,不想出现空数据,可以使用nvl(JINE,0)来得到0。由于null+(或-,*,/)数字等于
null,所以在表达式中对可能为空的值要使用nvl由于null!=null,有时对可能为空的列进行条件查询时,可能出现结果集丢失数据问题,加上
nvl就不会了。

经典用法:

通过查询获得某个字段的合计值,如果这个值为null将给出一个预设的默认值例如:select nvl(sum(t.字段),1)  from table t就表示如果sum(t.字段) = NULL 就返回 1另一个有关的有用方法declare i integerselect nvl(sum(t.字段),1) into i from table t 这样就可以把获得的合计值存储到变量i中,如果查询的值为null就把它的值设置为默认的1orcale
中:select nvl(rulescore,0) from zwjc_graderule where
rulecode='FWTD'; 如果记录中不存在rulecode ='FWTD'的数据.则查不出数据.select
nvl(rulescore,0) into rule_score from zwjc_graderule where
rulecode='FWTD';会报查不到数据的错select nvl(sum(rulescore),0) from zwjc_graderule where rulecode='FWTD'; 如果记录中不存在rulecode ='FWTD'的数据.还是可以得到一行列名为nvl(rulescore,0),值为0的数据.select nvl(sum(rulescore),0) into rule_score from zwjc_graderule where rulecode='FWTD'; 不会报错

oracle 函数介绍之nvl2

Oracle在NVL函数的功能上扩展,提供了NVL2函数。NVL2(E1, E2, E3)的功能为:如果E1为NULL,则函数返回E3,否则返回E2。E2和E3类型不同的话,E3会转换为E2的类型。

限制: 1) E1可以是任意类型,E2,E3不能是long类型。
       2) 如果 E2是字符类型,那么E3转为字符型再比较(null除外)。
       3) 如果 E2是数值类型,那么E3也转为对应的数值类型。
       4) 各个参数都不能是逻辑表达式.

oracle 函数介绍之nullif

格式: nullif(expr1,expr2)  等价于 "case when expr1 = expr 2 then null else expr1 end",相等返回NULL,不等返回expr1.
限制: expr1不能是标识符null,录入nullif(null,expr2)那么会提示错误。
           expr1,expr2 都必须是一个变量或者是一个常量表达式,不能是逻辑表达式。

oracle 函数介绍之lnnvl(a)

a是一个表达式
lnnvl只能用于where子句中;表达式的操作符号不能包含 AND, OR,  BETWEEN。
如果a的结果是false或者是unknown,那么lnnvl返回true;如果a的结果是true,返回false.
"如果a的结果是false或者是unknown,那么lnnvl返回true",这个很重要,因为一个空值或者unknown的值和另外一个常量或者有值的变量比较的时候,返回的总是unknown,所以
lnnvl(a>10)  等价于  nvl(a,0)<=10    等价于  a<=10 or a is null  (假设a number(10))
说白了,lnnvl是一种特定的用于简化表达式的函数,orcle解析的时候,应该会解析为 "a<=10 or a is null".

oracle 函数介绍之decode()

decode()函数简介:

主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明);

使用方法:

Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

From talbename

Where …

其中columnname为要选择的table中所定义的column,

·含义解释:

decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)的理解如下:

if (条件==值1)

then    

return(翻译值1)

elsif (条件==值2)

then    

return(翻译值2)    

......

elsif (条件==值n)

then    

return(翻译值n)

else    

return(缺省值)

end if

注:其中缺省值可以是你要选择的column name 本身,也可以是你想定义的其他值,比如Other等;

举例说明:

现定义一table名为output,其中定义两个column分别为monthid(var型)和sale(number型),若sale值=1000时翻译为D,=2000时翻译为C,=3000时翻译为B,=4000时翻译为A,如是其他值则翻译为Other;

SQL如下:

Select monthid , decode (sale,1000,'D',2000,'C',3000,'B',4000,'A',’Other’) sale from output

特殊情况:

若只与一个值进行比较

Select monthid ,decode(sale, NULL,‘---’,sale) sale from output

另:decode中可使用其他函数,如nvl函数或sign()函数等;

NVL(EXPR1,EXPR2)

若EXPR1是NULL,则返回EXPR2,否则返回EXPR1.

SELECT NAME,NVL(TO_CHAR(COMM),'NOT APPLICATION') FROM TABLE1;

如果用到decode函数中就是

select monthid,decode(nvl(sale,6000),6000,'NG','OK') from output

sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1,

如果取较小值就是

select monthid,decode(sign(sale-6000),-1,sale,6000) from output,即达到取较小值的目的。

oracle中使用sql查询时字段为空则赋值默认的更多相关文章

  1. Oracle中实现sql查询得到连续号码段

    一.表名为t的表中数据如下: select * from t; FPHM KSHM ---------- ---------- 实现代码如下: select b.fphm,min(b.kshm),ma ...

  2. oracle中通过sql查询sde中图形面积

    select st_area(shape) from XAG2011430200000M_DLTB t where objectid=330

  3. Oracle中的SQL分页查询原理和方法详解

    Oracle中的SQL分页查询原理和方法详解 分析得不错! http://blog.csdn.net/anxpp/article/details/51534006

  4. PL/SQL Developer中输入SQL语句时如何自动提示字段

    在PL/SQL Developer中编写sql语句时,如果无法自动提示字段那是一件痛苦的事情,工作效率又低,在此演示下如何在PL/SQL Developer工具中自动提示字段,让开发者省时又省心,操作 ...

  5. sql判断以逗号分隔的字符串中是否包含某个字符串--------MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法

    sql判断以逗号分隔的字符串中是否包含某个字符串---------------https://blog.csdn.net/wttykj/article/details/78520933 MYSQL中利 ...

  6. Oracle中的列转行实现字段拼接用例

    文章目录 Oracle中的列转行实现字段拼接 场景 在SQL使用过程中经常有这种需求:将某列字段拼接成in('XX','XX','XX','XX','XX','XX' ...)做为查询条件. 实现 s ...

  7. Oracle中PL/SQL的执行部分和各种流程控制

    Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...

  8. Oracle中PL/SQL简介、基本语法以及数据类型

    Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...

  9. 对于Oracle中分页排序查询语句执行效率的比较分析

    转自:http://bbs.csdn.net/topics/370033478 对于Oracle中分页排序查询语句执行效率的比较分析 作者:lzgame 在工作中我们经常遇到需要在Oracle中进行分 ...

随机推荐

  1. 服务器环境搭建系列(二)-Tomcat篇

    1.解压缩Tomcat的tar包,默认放在opt下 tar -zxvf apache-tomcat-6.0.35.tar.gz 2.输入如下命令修改tomcat配置文件 vi /opt/apache- ...

  2. 【记录】让人淡疼的BUG之参数传送错误

    前言 面试的时候往往容易被面试官问到:“说说你遇到过的比较重大或经典的Bug有哪些,能说一说吗?”我被问时脑海的反应是:“尼玛,这个我从来没有刻意记!一时半会咋想得起来,然后还是没想起来或者是随意给了 ...

  3. python与编码

    Python中的文字对象 Python 3.x中处理文字的对象有str, bytes, bytearray. bytes和bytearray可以使用除了用作格式化的方法(format, format_ ...

  4. UVA 11737 Extreme Primitive Society

    非常容易的一个题: 只要判断两种基因相差的最小值就行: #include<cstdio> #include<cstring> #include<algorithm> ...

  5. Unity3d 调用C++的DLL

    原地址:http://www.cnblogs.com/alongu3d/archive/2013/04/20/3031904.html Unity 3D 调用DLL的方法 本文转载:渡蓝的博客园 ht ...

  6. POJ 3352 Road Construction (边双连通分量)

    题目链接 题意 :有一个景点要修路,但是有些景点只有一条路可达,若是修路的话则有些景点就到不了,所以要临时搭一些路,以保证无论哪条路在修都能让游客到达任何一个景点 思路 :把景点看成点,路看成边,看要 ...

  7. 练习PYTHON之EPOLL

    哟,哟,哟,,SELECT,EPOLL之类的,终于出现了. 不能太急了,要缓一缓,缓一缓,再缓一缓~~~~~~~~~ http://scotdoyle.com/python-epoll-howto.h ...

  8. android TabActivity的局限性 是否还有存在的必要性

     TabActivity的局限性 是否还有存在的必要性 其实谷歌有此举动,我们也应该早就想到了,为什么会这么说呢?那就要从TabActivity的原理开始说起了. 做个假定先: 比如我们最外面的Act ...

  9. CC_UNUSED_PARAM 宏含义的解释

    #define CC_UNUSED_PARAM(unusedparam) (void)unusedparam 这个宏完全没有执行任何命令,这样写的原因主要是历史遗留原因,ojb-c不存在纯虚函数并且传 ...

  10. php 中奖概率算法

    我们先完成后台PHP的流程,PHP的主要工作是负责配置奖项及对应的中奖概率,当前端页面点击翻动某个方块时会想后台PHP发送ajax请求,那么后台PHP根据配置的概率,通过概率算法给出中奖结果,同时将未 ...