通用函数

通用函数判断,需要类型一直哦!!!

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个表达式时,返回遇到的第一个非空值,也就是从第一个表达式开始,依次类推,直到遇到一个非空值

一般会在最后给你默认值