数据库Oracle通用函数
通用函数:可用于任意数据类型,并且适用于空值。
• 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通用函数的更多相关文章
- Oracle实例和Oracle数据库(Oracle体系结构)
--========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --==================== ...
- 【转载】Oracle实例和Oracle数据库(Oracle体系结构)
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:Leshami 原文地址:http://blog.csdn.net/ ...
- Oracle 数据库(oracle Database)Select 多表关联查询方式
Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名 ...
- oracle通用函数,nvl,nvl2,NULLIF ,coalesce
Oracle 通用函数 ① NVL 函数--------将空值转换成一个已知的值: 可以使用的数据类型有日期.字符.数字. 函数的一般形式: NVL(commission_pct,0) ...
- spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置
spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...
- 各种数据库(oracle、mysql、sqlserver等)在Spring中数据源的配置和JDBC驱动包----转
在开发基于数据库的应用系统时,需要在项目中进行数据源的配置来为数据 库的操作取得数据库连接.配置不同数据库的数据源的方法大体上都是相同的,不同的只是不同数据库的JDBC驱动类和连接URL以及相应的数据 ...
- 数据库Oracle和MySQL 的不同
实例区别: MySQL是轻量型数据库,开源免费.Oracle收费,这个不是重点,,重点是它贵. MySQL一个实例可以操作多个库,而Oracle一个实例只能对应一个库. MySQL安装只有300多兆, ...
- JDBC(用Eclipse操作数据库Oracle)的基础操作集合
JDBC: JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编 ...
- [数据库]Oracle和mysql中的分页总结
Mysql中的分页 物理分页 •在sql查询时,从数据库只检索分页需要的数据 •通常不同的数据库有着不同的物理分页语句 •mysql物理分页,采用limit关键字 •例如:检索11-20条 selec ...
随机推荐
- RouterOS安装以及搭建DHCP PPPoE PPTP L2TP服务
1.安装routeros https://mikrotik.com/download 网站下载routeros镜像 vdi格式 :VirtualBox默认创建的硬盘文件格式 vmdk格式:VMware ...
- 关于@Autowired 与@Resource的
@Autowired注解是spring自己定义的,@Resource是由JSR-250规范定义的注解. @Resource的作用相当于@Autowired,只不过@Autowired按byType自动 ...
- nyoj 117 求逆序数 (归并(merge)排序)
求逆序数 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中 ...
- nyoj 290 动物统计加强版 (字典树 (Trie) PS:map<TLE>)
动物统计加强版 时间限制:3000 ms | 内存限制:150000 KB 难度:4 描述 在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单 ...
- nyoj 115-城市平乱 (BFS)
115-城市平乱 内存限制:64MB 时间限制:1000ms 特判: No 通过数:5 提交数:8 难度:4 题目描述: 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维 ...
- python 抓取youtube教程
前言: 相信大家很多人都看过youtube网站上的视频,网站上有很多的优质视频,清晰度也非常的高,看到喜欢的想要下载到本地,虽然也有很多方法,但是肯定没有python 来的快, 废话不多说,上代码: ...
- docker中部署项目时遇到的问题
容器和宿主机时间不同步问题? 将本地时间复制到docker容器内的etc文件夹下即可 docker cp /etc/localtime scrapy_8:/etc/ 启动crontab错误? 报错: ...
- 页面加载和图片加载loading
准备放假了!也是闲着了 ,就来整理之前学到或用到的一下知识点和使用内容,这次记录的是关于加载的友好性loading!!!这里记录一下两种加载方法 1.页面加载的方法,它需要用到js里面两个方法 doc ...
- [Odoo12基础教程]之第零篇-win中odoo12环境搭建
所需材料 1.python3.7 2.pycharm社区版及以上 3.postgresSQL10 下载链接:https://www.enterprisedb.com/thank-you-downloa ...
- LoadRunner 录制问题集锦
关键词:各路录制小白汇集于此 虽然知道君对录制不感冒,但总是看到扎堆的人说这些问题,忍不住要站出来了. 百度虽好,帮助了很多小白,但关键是百度并没有排除错误内容,经过历史的几年传播,错的都快变对的了, ...