环境:Oracle 10g

一开始接触的就是pascal语言,所以,有的时候不是很喜欢c语言的语法。

C语言中有一种偷懒的写法(java中也存在),大概是这样:var:=(a>=b?1:2);

我不是很喜欢这样。

但事实是,这的确可以偷懒,而且已经存在了,所以得适应它。

PL/SQL中没有这种语法,SQL中也没有,盖因为,PL/SQL是类似与PASCAL的语法,但它们有实现类似功能的函数,而关于空值的函数中就有。-

1)nvl(a,b)

最经典和简单的,详细的就不说了.可以用于任何地方。SELECT子句和WHERE子句等等中。

2)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".

3)nullif

开篇说了半天,PL/SQL中类似的就是这个函数。

格式: nullif(expr1,expr2) 等价于 "CASE WHEN expr1 = expr 2 THEN NULL ELSE expr1 END",

限制: expr1不能是标识符null,录入nullif(null,expr2)那么会提示错误。

expr1,expr2 都必须是一个变量或者是一个常量表达式,不能是逻辑表达式。

4)nvl2

也是一个类似c语言格式的函数.

格式:NVL2(EXPR1,EXPR2,EXPR3)

等价于: case when expr1 is null then expr2 else expr3 end

限制: 1) expr1可以是任意类型,expr2,expr3不能是long类型。

2) 如果 expr2是字符类型,那么expr3转为字符型再比较(null除外)。

3) 如果 expr2是数值类型,那么expr3也转为对应的数值类型。

4) 各个参数都不能是逻辑表达式.

总结: 1) 各个其它函数基本可以转为为nvl,或者case when 的格式。

2) 除了方便之外,其实只掌握nvl和case when 已经足够了

3) 如果可以的话,偶尔用用也是可以带来些些方便。

本文出自:亿恩科技【www.enkj.com】

oracle空值减去一个数_Oracle 空值(null)有关的函数相关推荐

  1. oracle空值减去一个数_如何把一个表里的空值置为0

    最初由 Right 发布 [B]在有is null情况下索引是无效的. [/B] 多谢Right兄的指正,看来偶的基本功很不扎实,补两篇文章,偶今天又学到了新东东,希望对大家也有帮助: NULL 使用 ...

  2. oracle和mysql空字符串_Oracle数据库中对null值的排序及mull与空字符串的区别

    order by排序之null值处理方法在对业务数据排序时候,发现有些字段的记录是null值,这时排序便出现了有违我们使用习惯的数据大小顺序问题.在Oracle中规定,在Order by排序时缺省认为 ...

  3. oracle查看视图定义语句_oracle视图详解

    Oracle 视图详解 一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的.视图只有逻辑定义.每次使用的时候,只是重新执行 ...

  4. Python处理数据中的空值(缺失值)时用到的dropna()函数和fillna()函数总结,通过示例弄懂这两个函数的用法。

    引言:在用python处理数据时,我们通常会遇到数据不完整的情况,比如有空值的时候,我们想要删除控制所在的行或列,或者是我们给空值设置为某一个值.这时候就可以用dropna和fillna两个函数来实现 ...

  5. oracle中行数少于1000,oracle中in的个数超过1000的解决办法

    oracle中in的个数要是超过1000就会报错,那么我们可以把它拆成一节一节的: in(1,2) or in (3,4) StringUtils.defaultIfEmpty的命名空间是: impo ...

  6. java oracle in 10000,Oracle 查询 in条件个数大于1000的解决方案

    Oracle 查询 in条件个数大于1000的解决方案,我所了解的有如下四种: 1. 把in分组再or: 思路:如果list的长度为2000,可以500个分一组,就有4个组,这4个组之间再or即可. ...

  7. oracle输入数字类型吗,PL/SQL Number数字类型函数

    PL/SQL Number数字类型函数 更新时间:2007年03月21日 00:00:00   作者: ABS(x) 函数,此函数用来返回一个数的绝对值. ACOS(x)函数,返回X的反余弦值.X范围 ...

  8. 输入10个整数,将其中最小的数与第一个数对换, 把最大的数与最后一个数对换。写3个函数:①输人10个数;②进行处理;③输出10个数。

    输入10个整数,将其中最小的数与第一个数对换, 把最大的数与最后一个数对换. 写3个函数: ①输人10个数; ②进行处理; ③输出10个数. 解题思路: 在进行数值逐个比较的同时找到最小值的空间地址以 ...

  9. ACMNO.41C语言-数字调序 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数

    题目描述 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图. 写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数. 输入 输入数据的个数n n个整数 移动的位置m ...

最新文章

  1. IE下的li有空白问题
  2. linux中sed的基本用法,linux sed用法
  3. C文件 写入 读取 函数
  4. Veeam FAQ系列转载(二)
  5. linux tee命令_Linux tee命令示例
  6. 应用WSH、JavaScript和 bat 实现自动化构建工具改善工作中的代码部署流程!
  7. Linux下安装python27
  8. 兄弟连新版PHP视频教程(共346讲)
  9. 如何对接线上支付接口
  10. 临危受命 青力支持:“信豫链”及时上线 保障河南中小企业带“资”复工
  11. 整理一些除了Google Adsense以外比较适合英文站的国外广告联盟
  12. 32岁坚持裸辞背负房贷1w4,被阿里面试官狂虐,沉淀3个月拿到腾讯offer年薪40w+!
  13. php微信支付mch_id参数格式错误,再说一下微信支付踩到的坑 mch_id 参数格式错误...
  14. Chapter 8 中医证型关联规则挖掘
  15. 聚力优创:拼多多的店铺怎么引流?秘诀分享
  16. JMeter学习(四)使用JMeter的HTTP代理服务器实现抓包功能
  17. 生物信息学软件_生信软件操作视频教程大赛
  18. 【云原生之Docker实战】使用Docker部署LibrePhotos照片管理系统
  19. MySql前三后四及归属地查询中间四位隐藏数字
  20. linux redis简单操作

热门文章

  1. -bash: ifconfig: 未找到命令
  2. Spring Cloud Stream多RabbitMQ实例配置时报错no default binder has been set
  3. sql server oracle特点,SQL Server 和 Oracle 以及 MySQL 有哪些区别
  4. ant部署web工程模板
  5. Oracle触发器6-管理触发器
  6. spring底层原理
  7. vue ---- 指令综合案例
  8. python符号格式化设置区间_[Python3 填坑] 001 格式化符号 格式化操作符的辅助指令...
  9. android audio 自动播放,HTML5之audio无法自动播放的问题
  10. Android开发笔记(二)颜色的使用