通用函数:可用于任意数据类型,并且适用于空值。
• NVL (expr1, expr2)

• NVL2 (expr1, expr2, expr3)

• NULLIF (expr1, expr2)

• COALESCE (expr1, expr2, ..., exprn)

NVL(expr1, expr2) 函数:转换一个空值到一个实际的值。
expr1,expr2:可用的数据类型可以是日期、字符和数字。两个参数的数据类型必须匹配。

expr1:是包含空值的源值或者表达式。

expr2:是用于转换空值的目的值。

例:计算所有员工的年佣金,如果没有佣金则返回年薪

SQL> select last_name,salary,12*salary*nvl(commission_pct,1) from employees order by salary;
LAST_NAME SALARY 12*SALARY*NVL(COMMISSION_PCT,1
------------------------- ---------- ------------------------------
Olson 2100.00 25200
Markle 2200.00 26400
Philtanker 2200.00 26400
Landry 2400.00 28800
Gee 2400.00 28800
Colmenares 2500.00 30000
Marlow 2500.00 30000
Patel 2500.00 30000
Vargas 2500.00 30000
Sullivan 2500.00 30000
Perkins 2500.00 30000
Himuro 2600.00 31200
Matos 2600.00 31200
OConnell 2600.00 31200
Grant 2600.00 31200
Mikkilineni 2700.00 32400
Seo 2700.00 32400
Tobias 2800.00 33600
Atkinson 2800.00 33600
Geoni 2800.00 33600

NVL2(expr1, expr2, expr3) 函数:

NVL2 函数检查第一个表达式,如果第一个表达式不为空,那么 NVL2 函数返回第二个表达式;

如果第一个表达式为空,那么第三个表达式被返回。

expr1:是可能包含空的源值或表达式。

expr2:expr1 非空时的返回值。

expr3:expr1 为空时的返回值。

例:计算所有员工的年薪,如果有佣金包含佣金。

SQL> select last_name,salary,commission_pct,to_char((12*salary*nvl2(commission_pct,commission_pct,0)+12*salary),'l999,999,999') from employees order by commission_pct;
LAST_NAME SALARY COMMISSION_PCT TO_CHAR((12*SALARY*NVL2(COMMIS
------------------------- ---------- -------------- ------------------------------
Lee 6800.00 0.10 ¥89,760
Johnson 6200.00 0.10 ¥81,840
Marvins 7200.00 0.10 ¥95,040
Banda 6200.00 0.10 ¥81,840
Kumar 6100.00 0.10 ¥80,520
Ande 6400.00 0.10 ¥84,480
Greene 9500.00 0.15 ¥131,100
Grant 7000.00 0.15 ¥96,600
Tuvault 7000.00 0.15 ¥96,600
Bates 7300.00 0.15 ¥100,740
Smith 7400.00 0.15 ¥102,120
Taylor 8600.00 0.20 ¥123,840
Bloom 10000.00 0.20 ¥144,000
Fox 9600.00 0.20 ¥138,240
Cambrault 7500.00 0.20 ¥108,000

NULLIF(expr1, expr2)函数:

比较两个表达式,如果相等,函数返回空,如果不相等,函数返回第一个表达式。第一个表达式不能为 NULL。

expr1 是对于 expr2 的被比较原值

expr2 是对于 expr1 的被比较原值。(如果它不等于 expr1,expr1 被返回)。

例:查询雇员,显示他们的 first_name 与长度,长度列命名为 expr1。last_name 与长度,长度命名为 expr2。判断他们的 first_name 与 last_name 的长度,如果长度相同返回空,否则返回 first_name 的长度。判断结果列命名为 result。

SQL> select first_name,length(first_name) "expr1",
2 last_name,length(last_name) "expr2",
3 nullif(length(first_name),length(last_name)) "result"
4 from employees;
FIRST_NAME expr1 LAST_NAME expr2 result
-------------------- ---------- ------------------------- ---------- ----------
Ellen 5 Abel 4 5
Sundar 6 Ande 4 6
Mozhe 5 Atkinson 8 5
David 5 Austin 6 5
Hermann 7 Baer 4 7
Shelli 6 Baida 5 6
Amit 4 Banda 5 4
Elizabeth 9 Bates 5 9
Sarah 5 Bell 4 5
David 5 Bernstein 9 5
Laura 5 Bissot 6 5
Harrison 8 Bloom 5 8
Alexis 6 Bull 4 6
Anthony 7 Cabrio 6 7
Gerald 6 Cambrault 9 6
Nanette 7 Cambrault 9 7
John 4 Chen 4
Kelly 5 Chung 5
Karen 5 Colmenares 10 5
Curtis 6 Davies 6
FIRST_NAME expr1 LAST_NAME expr2 result

COALESCE (expr1, expr2, ... exprn) 函数:返回列表中的第一个非空表达式。

expr1 如果它非空,返回该表达式。

expr2 如果第一个表达式为空并且该表达式非空,返回该表达式。

exprn 如果前面的表达式都为空,返回该表达式。

例:查询雇员表,如果 COMMISSION_PCT 值是非空,显示它。如果 COMMISSION_PCT值是空,则显示 SALARY 。如果 COMMISSION_PCT 和 SALARY 值都是空,那么显示10。

SQL> select last_name,coalesce(COMMISSION_PCT,salary,10) from employees;
LAST_NAME COALESCE(COMMISSION_PCT,SALARY
------------------------- ------------------------------
King 24000
Kochhar 17000
De Haan 17000
Hunold 9000
Ernst 6000
Austin 4800
Pataballa 4800
Lorentz 4200
Greenberg 12008
Russell 0.4
Partners 0.3
Errazuriz 0.3
Cambrault 0.3
Zlotkey 0.2
Tucker 0.3
Bernstein 0.25
Hall 0.25
Olsen 0.2
Cambrault 0.2
Tuvault 0.15
King 0.35
Sully 0.35

条件表达式:

– CASE 表达式

– DECODE 函数

CASE  表达式:

CASE 表达式:CASE 表达式可以让你在 SQL 语句中使用 IF-THEN-ELSE 逻辑。如果没有 WHEN ... THEN 满足条件,并且 ELSE 子句存在,Oracle 返回 else_expr。否则,Oracle 返回 null。所有的表达式 ( expr、comparison_expr 和 return_expr) 必须是相同的数据类型。

示例:
查询雇员,显示 last_name,job_id,salary 如果 JOB_ID 是 IT_PROG,薪水增加 10%;如果 JOB_ID 是 ST_CLERK,薪水增加 15%;如果 JOB_ID 是 SA_REP,薪水增加 20%。对于所有其他的工作角色,不增加薪水。

SQL> select last_name,job_id,salary,
2 CASE job_id
3 WHEN 'IT_PORG' THEN salary*1.1
4 WHEN 'ST_CLERK' THEN salary*1.5
5 WHEN 'SA_REP' THEN salary*1.2
6 END
7 from employees;
LAST_NAME JOB_ID SALARY CASEJOB_IDWHEN'IT_PORG'THENSAL
------------------------- ---------- ---------- ------------------------------
King AD_PRES 24000.00
Kochhar AD_VP 17000.00
De Haan AD_VP 17000.00
Hunold IT_PROG 9000.00
Ernst IT_PROG 6000.00
Austin IT_PROG 4800.00
Pataballa IT_PROG 4800.00
Lorentz IT_PROG 4200.00
Greenberg FI_MGR 12008.00
Faviet FI_ACCOUNT 9000.00
Chen FI_ACCOUNT 8200.00
Sciarra FI_ACCOUNT 7700.00
Urman FI_ACCOUNT 7800.00
Popp FI_ACCOUNT 6900.00
Raphaely PU_MAN 11000.00
Khoo PU_CLERK 3100.00
Baida PU_CLERK 2900.00
Tobias PU_CLERK 2800.00
Himuro PU_CLERK 2600.00
Colmenares PU_CLERK 2500.00

DECODE 函数:

DECODE 函数:DECODE 函数以一种类似于在多种语言中使用的 IF-THEN-ELSE 逻辑的方法判断一个表达式。 DECODE 函数在比较表达式 (expression) 和每个查找 (search)值后,如果表达式与查找相同,返回结果。如果省略默认值,当没有查找值与表达式相匹配时返回一个空值。

示例:

使用 DECODE 函数完成(显示 last_name,job_id,salary 如果 JOB_ID 是 IT_PROG,薪水增加 10%;如果 JOB_ID 是 ST_CLERK,薪水增加 15%;如果 JOB_ID 是 SA_REP,薪水增加 20%。对于所有其他的工作角色,不增加薪水。)

SQL> select last_name,job_id,salary,
2 decode(job_id,'IT_PORG',salary*1.1,'ST_CLERK',salary*1.15,'SA_REP',salary*1.2)
3 from employees
4 order by SALARY;
LAST_NAME JOB_ID SALARY DECODE(JOB_ID,'IT_PORG',SALAR
------------------------- ---------- ---------- -----------------------------
Olson ST_CLERK 2100.00 2415
Markle ST_CLERK 2200.00 2530
Philtanker ST_CLERK 2200.00 2530
Landry ST_CLERK 2400.00 2760
Gee ST_CLERK 2400.00 2760
Colmenares PU_CLERK 2500.00
Marlow ST_CLERK 2500.00 2875
Patel ST_CLERK 2500.00 2875
Vargas ST_CLERK 2500.00 2875
Sullivan SH_CLERK 2500.00
Perkins SH_CLERK 2500.00
Himuro PU_CLERK 2600.00
Matos ST_CLERK 2600.00 2990
OConnell SH_CLERK 2600.00
Grant SH_CLERK 2600.00
Mikkilineni ST_CLERK 2700.00 3105
Seo ST_CLERK 2700.00 3105
Tobias PU_CLERK 2800.00
Atkinson ST_CLERK 2800.00 3220

数据库Oracle通用函数的更多相关文章

  1. Oracle实例和Oracle数据库(Oracle体系结构)

    --========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --==================== ...

  2. 【转载】Oracle实例和Oracle数据库(Oracle体系结构)

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:Leshami      原文地址:http://blog.csdn.net/ ...

  3. Oracle 数据库(oracle Database)Select 多表关联查询方式

    Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名 ...

  4. oracle通用函数,nvl,nvl2,NULLIF ,coalesce

    Oracle 通用函数 ① NVL 函数--------将空值转换成一个已知的值: 可以使用的数据类型有日期.字符.数字. 函数的一般形式:   NVL(commission_pct,0)       ...

  5. spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置

    spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...

  6. 各种数据库(oracle、mysql、sqlserver等)在Spring中数据源的配置和JDBC驱动包----转

    在开发基于数据库的应用系统时,需要在项目中进行数据源的配置来为数据 库的操作取得数据库连接.配置不同数据库的数据源的方法大体上都是相同的,不同的只是不同数据库的JDBC驱动类和连接URL以及相应的数据 ...

  7. 数据库Oracle和MySQL 的不同

    实例区别: MySQL是轻量型数据库,开源免费.Oracle收费,这个不是重点,,重点是它贵. MySQL一个实例可以操作多个库,而Oracle一个实例只能对应一个库. MySQL安装只有300多兆, ...

  8. JDBC(用Eclipse操作数据库Oracle)的基础操作集合

    JDBC: JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编 ...

  9. [数据库]Oracle和mysql中的分页总结

    Mysql中的分页 物理分页 •在sql查询时,从数据库只检索分页需要的数据 •通常不同的数据库有着不同的物理分页语句 •mysql物理分页,采用limit关键字 •例如:检索11-20条 selec ...

随机推荐

  1. python面试题2.1:如何实现栈

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 2.1 如何实现栈 [阿里巴巴面试题] 难度系数:⭐⭐⭐ 考察 ...

  2. 数据结构之队列and栈总结分析

    一.前言: 数据结构中队列和栈也是常见的两个数据结构,队列和栈在实际使用场景上也是相辅相成的,下面简单总结一下,如有不对之处,多多指点交流,谢谢. 二.队列简介 队列顾名思义就是排队的意思,根据我们的 ...

  3. 外行人都能看懂的WebFlux,错过了血亏!

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 本文知识点架构: 如果有关注我公众号文章的同学就会发 ...

  4. hdu 1083 Courses (最大匹配)

    CoursesTime Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  5. 领扣(LeetCode)删除链表的倒数第N个节点 个人题解

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...

  6. python:类1——类和对象基础

    一.OO = Object Oriented 面向对象 OOP面向对象编程.OOA面向对象分析.OOD面向对象设计 二.属性+方法——>类(数据和函数) class Turtle(): #类名约 ...

  7. SpringBoot让你的Bean动起来(自定义参数解析HandlerMethodArgumentResolver)

    SpringBoot让你的Bean动起来(自定义参数解析HandlerMethodArgumentResolver) 简介 我们 Controller 用到的一些 Bean 需要通过一定的方式去获取的 ...

  8. 从cocos2dx源代码看android和iOS跨平台那些事

    cocos2dx一个跨移动(平板)平台的游戏引擎,支持2d和3d,基于c/c++,网上介绍多在此不详叙.我们本篇关心的是跨平台那些事,自然而然就找到platform目录.好家伙,支持的操作平台还真不少 ...

  9. js数组和集合互转

    js数组和集合互转可用于去重:   数组转集合 var arr = [55, 44, 65]; var set = new Set(arr); console.log(set.size === arr ...

  10. AntDeploy一键发布netcore3.0Windows服务到远程服务器

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...