通用函数:可用于任意数据类型,并且适用于空值。
• 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. vue , debounce 使用

    有时候不想直接在methods中的方法前面加debounce, getFullName: debounce(function() { console.log('my fullname is chent ...

  2. Unity中用Mesh画一个圆环(二)

    中目标-生成完整面 在之前的内容中我们已经成功生成了一个面,接下来我们要生成剩下的面就很容易了. 我们把之前生成的面当作顶面,接着我们来生成底面. 还记得前面说过\(\color{#1E90FF}{D ...

  3. Windows服务的删除与添加

    Windows服务的删除与添加 以管理员身份运行 CMD 服务的删除 sc delete 服务名称 服务添加 sc create 服务名称 binpath="服务EXE文件所在的目录&quo ...

  4. 安装win7和ubuntu16.04双系统

    硬件:2012年本子  话硕A55V Service 准备: 首先通过一键还原备份win7系统!不清楚某些失误会不会备份也不能拯救! 清出100g硬盘空间,ubuntu会安装在这里 查看当前win7启 ...

  5. 解构ffmpeg(一)

    ffmpeg应用程序项目将其核心库libav*的使用或编程抽象成FilterGraph,InputFile,OutputFile,InputStream,OutputStream,InputFilte ...

  6. opencv HSV找颜色,找轮廓用最小旋转矩形框出

    #include <opencv2/opencv.hpp> #include<iostream> #include<string> using namespace ...

  7. 建筑行业的新起之秀---BIM

       近年来,BIM在国家在建筑行业的推进下逐渐走近人们的视线,而且BIM技术是作为建筑领域的一项新技术行业发展的越来越好,在很多的建筑场景都用到了BIM建模.施工.运维以及BIM+GIS等以BIM为 ...

  8. 如何使用C#调用C++类虚函数(即动态内存调用)

      本文讲解如何使用C#调用只有.h头文件的c++类的虚函数(非实例函数,因为非虚函数不存在于虚函数表,无法通过类对象偏移计算地址,除非用export导出,而gcc默认是全部导出实例函数,这也是为什么 ...

  9. Spring框架AOP学习总结(下)

    目录 1. AOP 的概述 2. Spring 基于AspectJ 进行 AOP 的开发入门(XML 的方式): 3.Spring 基于AspectJ 进行 AOP 的开发入门(注解的方式): 4.S ...

  10. .NET Core 3.0 使用Nswag生成Api文档和客户端代码

    摘要 在前后端分离.Restful API盛行的年代,完美的接口文档,成了交流的纽带.在项目中引入Swagger (也称为OpenAPI),是种不错的选择,它可以让接口数据可视化.下文将会演示 利用N ...