一、NULL处理

(1)函数的计算过程

到目前为止,您已经学会了在简单语句中应用单行函数。不过,函数可以嵌套任意层。所以,了解嵌套函数的计算过程非常重要。下例就是一个嵌套函数。其计算过程是从最里层开始计算,直到最外层。
SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS(聘用日期, 6),'FRIDAY'), 'fmDay, Month DDth, YYYY') AS "下一天计算结果"
FROM 雇员
WHERE 雇员标识=100;
结果为:

Friday, December 18th, 1987

SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS(聘用日期, 6),'FRIDAY'), 'fmDay, Month DDth, YYYY') AS "下一天计算结果"FROM 雇员  WHERE 雇员标识=100;

• 步骤 1:在聘用日期基础上加上六个月。

• 步骤 2:确定聘用日期之后的第一个星期五。

• 步骤 3:转换默认的日期格式,采用如下格式显示这个星期五:Friday, December 18th, 1987,在输出结果中这些内容将显示在列名“下一天计算结果”下。

(2)涉及 Null 值的函数

在课程开始阶段,我们已介绍了“Null”这个术语。您可能还记得,Null 就是不可用、未指定、未知或不适用的值。从根本上讲,我们无法测试该值是否与其它值一样,因为我们不知道它是什么值。它不等于任何值,也不等于零!Null 不代表任何实际值,但这并不意味着它不重要。请想象一下这样的问题:X = Y 正确吗?要回答此问题,必须知道 X 和 Y 的值。Oracle 有四个涉及使用null 值的常规函数。这四个函数为:
- NVL
- NVL2
- NULLIF

- COALESCE

二、NVL 函数

NVL 函数可以将 null 值转换为固定数据类型(日期、字符或数字)的已知值。Null 值列和新值的数据类型必须相同。

该 NVL 函数为:

NVL (可能包含 null 的值或列, 用以替换 null的值)

以下查询使用字符数据类型的 NVL 函数:

select nvl(注释, '没有注释')
from d_播放列表曲目;

Null 值列和新值的数据类型必须相同,如下例
所示:

nvl(批准的费用金额,0)
nvl(聘用日期,'01-JAN-97')
nvl(专业,'暂无')

可以在进行计算之前,使用 NVL 函数将包含null 的列值转换为数字。对 null 执行算术计算时,结果为 null。NVL 函数可以在进行算术计算之前,将 null 值转换为数字,以避免结果为 null。

在本示例中,D_合作伙伴表中的“批准的费用金额”列包含 null 值。NVL 函数用于在进行算术计算之前将 null 更改为零。

select 名字, 姓氏, nvl(批准的费用金额, 0) * 1.05 as 费用
from d_合作伙伴;

三、NVL2 函数

NVL2 函数对包含三个值的表达式求值。如果第一个值不为 null,则 NVL2 函数返回第二个表达式。如果第一个值为 null,则返回第三个表达式。表达式 1 中的值可以采用任意数据类型。表达式 2 和表达式 3 可以采用 LONG 之外的任意数据类型。返回值的数据类型始终与表达式 2 的数据类型相同,除非表达式 2 是字符数据(在这种情况下,返回值为 VARCHAR2 数据类型)。

NVL2 函数是:

    NVL2 (可能包含 null 的表达式 1 值, 表达式 1 不是null 时要返回的表达式 2 值, 表达式 1 是 null 时用以替换 null 的表达式 3 值)

记忆 NVL2 函数的一个小窍门是:“如果表达式 1 具有值,则返回替代表达式 2;如果表达式 1 是 null,则返回替代表达式 3。”

在下面所示的 NVL2 函数中,表达式 1 使用数字数据,表达式 2和 3 使用字符数据。

select 姓氏, 薪金, nvl2(佣金百分比, 薪金 + (薪金 * 佣金百分比), 薪金) as 收入
from 雇员;

四、NULLIF 函数

NULLIF 函数对两个函数进行比较。如果它们相等,则函数返回null。如果不相等,则函数返回第一个表达式。
NULLIF 函数为:

nullif(表达式 1, 表达式 2)

select 名字, length(名字) "名字长度",姓氏, length(姓氏) "姓氏长度", nullif(length(名字), length(姓氏)) as "比较结果"
from d_合作伙伴;

五、COALESCE 函数

COALESCE 函数是 NVL 函数的扩展,但是COALESCE 函数可以接受多个值。单词“coalesce”的字面意义是“联合”,这就是该函数所要执行的操作。
    如果第一个函数是 null,则函数会继续执行下一行,直到找到一个非 null 表达式。当然,如果第一个表达式具有值,则函数将返回第一个表达式并就此结束。

COALESCE 函数为:
COALESCE (表达式 1,表达式 2, ...表达式 n)

分析右侧所示的从雇员表进行检索的 SELECT 语句。

哪些雇员未获得佣金?您是如何判断出的?是否有些雇员既未获得佣金也未获得薪金?

Oracle入门(十四D)之常规函数相关推荐

  1. c语言标准库详解(十四):时间函数time.h

    c语言标准库详解(十四):时间函数<time.h> 概述 头文件<time.h>中声明了一些处理日期与时间的类型和函数.其中的一些函数用于处理当地时间,因为时区等原因,当地时间 ...

  2. 带你自学Python系列(十四):Python函数的用法(四)

    ↑ 点击上方[计算机视觉联盟]关注我们 今天是小编持续更新关于Python的知识总结以及Python实践项目应用的第5天,带你利用零碎时间自学最受欢迎的编程语言之一Python语言.你和小编一起打卡了 ...

  3. tableau实战系列(十四)-用 Fixed 函数轻松实现环比分析

    我想要做本月和上月销售额的环比,但是,按照常规做法创建完计算字段后,想要按照时间筛选,却发现上个月的销售额是无法被筛选的,而且时间筛选也很麻烦,要多次点选. 这个问题应该是很多数据粉都遇到过的,那么, ...

  4. python六十四课——高阶函数练习题(一)

    1.lt = ['sdfasdfa', 'ewqrewrewqr', 'dsafa12312fdsafd', 'safsadf'] --> 得到长度列表2.tp = ('TOM', 'Lilei ...

  5. C语言试题二十四之编写一个函数unsigned function(unsigned w),w使一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w后n-1位的数作为函数值返回。

    1. 题目 请编写一个函数unsigned function(unsigned w),w使一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w后n-1位的数作为函数值返回. 比如:w是1 ...

  6. Helm 3 完整教程(十四):Helm 函数讲解(8)数学计算函数

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  7. java怎样用类模板创建对象_java入门(十四) | 面向对象(OOP)之类和对象

    上一期是变量,在java中变量总是无处不在,而变量其意就是可以改变的数,在一般情况下我们可以以变量类型,变量名,变量值来描述它 这一期是给面向对象(OOP)开了一个头,对他的概念,三大特征有了一个基础 ...

  8. slam入门——十四讲笔记(一)

    文章目录 第1讲 预备知识 第1部分 数学基础 第2讲 初识SLAM 2.1 引子:小萝卜的例子 2.2 经典视觉SLAM框架 2.3 SLAM问题的数学表述 2.4 实践:编程基础 1. 安装Lin ...

  9. 蓝桥杯—单片机第十四届底层驱动函数修改

    本文总结了关于14届蓝桥杯单片机底层驱动文件相较13届的变化所需作出的改变,总体区别不大,欢迎批评指正. 1.不再提供.h文件,故要牢记头文件书写格式: 与引用格式: 添加步骤: 2.Onewire. ...

  10. 【Excel2019(二十四):宏表函数】【利用宏表函数获取信息+宏表函数常见应用】

    上一篇:[Excel2019(二十三):饼图美化与PPT图表][双坐标柱形图的补充知识+饼图美化+PPT中的图表] 文章目录 利用宏表函数获取信息 get.cell函数 计算颜色 提取公式 常用的Ty ...

最新文章

  1. 在TMG2010中发布Web服务器场
  2. html button跳转页面_HTML跳转到页面指定位置的几种方法
  3. 10怎么设置pg接口_西门子S7300 PLC时间日期怎么读取?
  4. python2 http请求post、get
  5. linux查看cpu占用率_Linux 性能查看
  6. docker network bridge模式,自定义(一)
  7. c# 子窗口与父窗口之间的传值
  8. Struts1.x多文件上传问题
  9. 使用Flex4画图形
  10. 防止mdf文件被非法附加后修改的一个简单实现方案
  11. Java网络编程之实现HTTP断点续传下载工具(附源代码)
  12. 万人拆盲盒,比特小鹿“2周年庆”云托管新团掀高潮
  13. RAID1与RAID0的区别
  14. python实现em聚类算法_EM算法的python实现的方法步骤
  15. 用pyqt原生功能实现自由屏幕截图
  16. 根据经纬度确定行政区域_基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标...
  17. 利弗莫尔的操作系统到底是怎样的?
  18. 栅栏布局合并html,arcgis栅格数据合并 arcgis栅格图像拼接步骤
  19. 基于JAVA教室实验室预约系统设计与实现 开题报告
  20. 《OpenDRIVE1.6规格文档》5

热门文章

  1. maskrcnn还可以加网络吗_绿茶加蜂蜜的功效,绿茶可以加蜂蜜吗?
  2. [Spring5]AOP底层原理
  3. [mybatis]动态sql_set_与if结合的动态更新
  4. [mybatis]全局配置文件标签顺序
  5. 字符串哈希-BKDRHash
  6. A. [2021.1.29多校省选模拟11]最大公约数(杜教筛/数论)
  7. 【集训队作业2018】复读机【指数型生成函数】【单位根反演】【二项式定理】
  8. CF455B A Lot of Games
  9. CF1497D Genius
  10. cf1453B. Suffix Operations