通用函数:可用于任意数据类型,并且适用于空值。
• 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. javascript采用Broadway实现安卓视频自动播放的方法(这种坑比较多 不建议使用)

    javascript采用Broadway实现安卓视频自动播放的方法Broadway 是一个 H.264 解码器, 比jsmpge清晰度要高 使用 Emscripten 工具从 Android 的 H. ...

  2. 原来JS是这样的 - 原型链

    上一篇提到属性描述符 [[Get]] 和 [[Put]] 以及提到了访问描述符 [[Prototype]],看它们的特性就会很容易的让人想到经典的面向对象风格体系中对类操作要做的事情,但带一些 int ...

  3. Servlet——用户登录案例

    案例:用户登录 * 用户登录案例需求: 1.编写login.html登录页面 username & password 两个输入框 2.使用Druid数据库连接池技术,操作mysql,day14 ...

  4. Dubbo的应用

    导语:Dubbo是阿里巴巴的一个分布式服务的开源框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000 ...

  5. 更改微信小程序的组件默认样式

    checkbox /*checkbox 整体大小  */ .checkbox {      width: 12%;      /* height: 240rpx; */ } /*checkbox 选项 ...

  6. linux服务器MySQL数据从磁盘拷贝以及恢复

    偶有感触:遇到这个问题,经过一个下午的排查, 终于解决. 故事情节:我的阿里云服务器突然被黑客攻击了,整个系统down了. 找客服,他们排查说usr目录的文件全部丢失.让我重新初始化系统盘.初始化之前 ...

  7. Python3.7.1学习(六)RabbitMQ在Windows环境下的安装

    Windows下安装RabbitMQ 环境配置 部署环境 部署环境:windows server 2008 r2 enterprise(本文安装环境Win7) 官方安装部署文档:http://www. ...

  8. Linux内核版本 uname命令 GNU项目 Linux发行版

    1.内核版本由linux内核社区统一编码和发布,格式如下图: major.minor.patch-build.desc 主版本号.次版本号.对次版本号的修订次数-编译次数.当前版本的特殊信息 次版本号 ...

  9. 学习记录:《C++设计模式——李建忠主讲》3.“组件协作”模式

    “组件协作”模式:现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式.典型模式:Template M ...

  10. Linux菜鸟——搭建虚拟机环境

    最近在学习Linux搭建服务器,但本人对于Linux一无所知,所以花了两天时间把安装,命令,控制,搭建环境等一系列操作都囫囵吞枣了一遍,但又怕自己记不住太多,所以记录下以前搭建的所有步骤,希望能提醒自 ...