通用函数判断,需要类型一直哦!!!
NVL函数
语法:NVL(第一个值,第二个值)
若第一个值为空,则返回第二个值,相当于当第一个值为空的时候给了个默认值!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 | --打印原始数据
SQL> SELECT * FROM EMP;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 1980/12/17 800.00 20
7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981/4/2 2975.00 20
7654 MARTIN SALESMAN 7698 1981/9/28 1250.10 1400.00 30
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.23 10
7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987/5/23 1100.00 20
7900 JAMES CLERK 7698 1981/12/3 950.55 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
14 rows selected
--当sal+comm时,因为comm部分数据是空,所以当任意值与空值运算时结果均为空值,导致只有4行数据
SQL> SELECT SAL+COMM FROM EMP;
SAL+COMM
----------
1900
1750
2650.1
1500
14 rows selected
--使用nvl判断comm,当comm为空值时转换为0,方便运算!
SQL> SELECT SAL+NVL(COMM,0) FROM EMP;
SAL+NVL(COMM,0)
---------------
800
1900
1750
2975
2650.1
2850
2450
3000
5000.23
1500
1100
950.55
3000
1300
14 rows selected
|
NVL2函数
语法:NVL2(第一个值,第二个值,第三个值)
当第一个值非空(true),则返回第二个值;当第一个值为空(false),则返回第三个值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 | --打印源数据
SQL> SELECT * FROM EMP;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 1980/12/17 800.00 20
7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981/4/2 2975.00 20
7654 MARTIN SALESMAN 7698 1981/9/28 1250.10 1400.00 30
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.23 10
7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987/5/23 1100.00 20
7900 JAMES CLERK 7698 1981/12/3 950.55 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
14 rows selected
--当comm为非空时,打印comm+sal;当comm为空时,打印sal
SQL> SELECT NVL2(COMM,COMM+SAL,SAL) FROM EMP;
NVL2(COMM,COMM+SAL,SAL)
-----------------------
800
1900
1750
2975
2650.1
2850
2450
3000
5000.23
1500
1100
950.55
3000
1300
14 rows selected
|
NULLIF函数
语法:null(第一个值,第二个值)
对比两个值,若相等(true),返回空;若不相等(false),返回第一个值,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | --对比ename和job的长度:当长度相同则返回空;不相同则返回第一个值(ename)
SQL> SELECT eNAME,LENGTH(ENAME),JOB,LENGTH(JOB),NULLIF(LENGTH(ENAME),LENGTH(JOB)) FROM EMP;
ENAME LENGTH(ENAME) JOB LENGTH(JOB) NULLIF(LENGTH(ENAME),LENGTH(JO
---------- ------------- --------- ----------- ------------------------------
SMITH 5 CLERK 5
ALLEN 5 SALESMAN 8 5
WARD 4 SALESMAN 8 4
JONES 5 MANAGER 7 5
MARTIN 6 SALESMAN 8 6
BLAKE 5 MANAGER 7 5
CLARK 5 MANAGER 7 5
SCOTT 5 ANALYST 7 5
KING 4 PRESIDENT 9 4
TURNER 6 SALESMAN 8 6
ADAMS 5 CLERK 5
JAMES 5 CLERK 5
FORD 4 ANALYST 7 4
MILLER 6 CLERK 5 6
|
coalesce函数
语法:coalesce(表达式,表达式,表达式 ... 默认值)
当有N个表达式时,返回遇到的第一个非空值,也就是从第一个表达式开始,依次类推,直到遇到一个非空值
一般会在最后给你默认值