oracle 12c 通用函数
本节主要学习内容为通用函数,包括如下图所示
NVL函数
说明
NVL为式1为NULL值以外的数是式1,NULL 值得时候则为式2
if(式1 != null) {
式1
}else{
式2
}
写法
NVL(式1,式2)
-----------
eg:
SELECT ename,sal,sal+NVL(comm,0)
from employees
/*当奖金为null,设置为0*/
注意
- 式2 的类型必须和式1 的数据类型相同,oracle 隐式转换也包括。(不建议倚赖隐式转换)
NVL2函数
说明
NVL为式1为NULL值以外的数是式2,NULL 值得时候则为式3
if(式1 != null) {
式2
}else{
式3
}
写法
NVL2(式1,式2,式3)
-----------
eg:
SELECT ename,sal,sal+NVL(comm,10000,0)
from employees
/*当奖金为null,设置为0,否则为10000*/
注意
- 式2 的类型必须和式3 的数据类型相同,oracle 隐式转换也包括。(不建议倚赖隐式转换)
NULLIF函数
说明
NULLIF为式1与式2相比较,相等的情况下为NULL,不相等的情况下为式1;
if(式1 == 式2) {
null
}else{
式1
}
写法
NULLIF(式1,式2)
-----------
eg:
SELECT ename,sal,nullif(comm,sal/10)
from employees
SQL> select nullif(50,50) from dual;
NULLIF(50,50)
-------------
SQL> select nullif(50,30) from dual;
NULLIF(50,30)
-------------
50
注意
- 式1不能是文字NULL。
- 如果两个参数都是数字数据类型,Oracle数据库将确定较高优先级参数,将其余参数隐式转换为该数据类型,然后返回该数据类型。 如果这两个参数不是数字,它们的数据类型必须相同。 如果数据类型不同,Oracle会返回一个错误。
COALESCE函数
说明
COALESCE返回表达式列表中的第一个非NULL expr。 必须指定多个表达式。 如果所有expr的计算结果都为NULL,则该函数返回NULL。
if(式1 == null) {
return 式1;
}else if(式2 == null){
return 式2;
}
...
else if(式n == null) {
return 式n;
}else{
return null;
}
写法
COALESCE(式1,式2[,式n])
-----------
eg:
select eno,ename, nickname,coalesce(ename,nickname,to_char(eno))
from employees
/*查询名称,如果名字为空,则为昵称,如果昵称也为空,则是id*/
注意
- 式n 类型相同,或者可以隐式转换。
CASE条件式
说明
使用CASE表达式,可以在不调用过程的情况下使用SQL … THEN … ELSE逻辑。
switch( 式 ) {
case 条件1:
数值1
break;
case 条件2:
数值2
break;
...
default:
break;
}
写法
CASE 式 WHEN 条件式1 THEN 数值1
[WHEN 条件式2 THEN 数值2]
[WHEN 条件式3 THEN 数值3...]
ELSE 数值4
END
-----------
eg:
select ename,sal,(case when sal < 230000 then 'A'
when sal < 380000 then 'B'
END) sal_level
from employees;
/*规定不同的工资等级*/
注意
- Oracle数据库使用短路评估。 对于搜索CASE表达式,数据库评估每个条件以确定这是否为真。 但是,如果条件成立,则不评估下一个条件。
DECODE函数
说明
DECODE将式与每个条件式逐一进行比较。如果expr等于条件式,Oracle数据库将返回相应的结果。如果找不到匹配的值,则返回默认值。如果省略默认值,则返回NULL。
switch( 式 ) {
case 式==条件1:
数值1
break;
case 式==条件2:
数值2
break;
...
default:
null
break;
}
写法
DECODE (式,条件式1,数值1
[, 条件式2,数值2]
[,条件式3, 数值3...]
[, 数值4])
-----------
eg:
select deptno,ename,sal,decode(deptno,10,sal*1.1,
20,sal*1.2,
sal*1.5)new_sal
from employees;
/*根据部门,,调整新的工资*/
注意
- DECODE函数的最大组件数为255,包括expr,search,result,default。