zoukankan      html  css  js  c++  java
  • 函数nvl,nvl2,nullif,coalesce

    NVL: Converts a null value to an actual value
    NVL2:If expr1 is not null, NVL2 returns expr2. If expr1 is null, NVL2 returns expr3. The argument expr1 can have any data type.
    NULLIF:Compares two expressions and returns null if they are equal; returns the first expression if they are not equal
    COALESCE:Returns the first non-null expression in the expression list.

    nvl(COMMISSION_PCT,0)
    如果第一个参数为null,则返回第二个参数
    如果第一个参数为非null,则返回第一个参数

    SQL> select * from emp;
    
         EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
          7369 SMITH      CLERK           7902 1980-12-17 00:00:00        800                    20
          7499 ALLEN      SALESMAN        7698 1981-02-20 00:00:00       1600        300         30
          7521 WARD       SALESMAN        7698 1981-02-22 00:00:00       1250        500         30
          7566 JONES      MANAGER         7839 1981-04-02 00:00:00       2975                    20
          7654 MARTIN     SALESMAN        7698 1981-09-28 00:00:00       1250       1400         30
          7698 BLAKE      MANAGER         7839 1981-05-01 00:00:00       2850                    30
          7782 CLARK      MANAGER         7839 1981-06-09 00:00:00       2450                    10
          7788 SCOTT      ANALYST         7566 1987-04-19 00:00:00       3000                    20
          7839 KING       PRESIDENT            1981-11-17 00:00:00       5000                    10
          7844 TURNER     SALESMAN        7698 1981-09-08 00:00:00       1500          0         30
          7876 ADAMS      CLERK           7788 1987-05-23 00:00:00       1100                    20
          7900 JAMES      CLERK           7698 1981-12-03 00:00:00        950                    30
          7902 FORD       ANALYST         7566 1981-12-03 00:00:00       3000                    20
          7934 MILLER     CLERK           7782 1982-01-23 00:00:00       1300                    10
          1111 rusky      clerk           7698                                       111         20
    
    已选择15行。
    
    SQL> select nvl(comm,0) from emp;
    
    NVL(COMM,0)
    -----------
              0
            300
            500
              0
           1400
              0
              0
              0
              0
              0
              0
              0
              0
              0
            111
    
    已选择15行。
    
    SQL>

    NVL2(COMMISSION_PCT,'SAL_COMM','SAL')
    如果第一个参数为null,则返回第三个参数
    如果第一个参数为非null,则返回第二个参数

    (例:如果奖金为空,则返回工资,如果奖金非空,则返回奖金与工资总和)

    SQL> select nvl2(comm,comm+nvl(sal,0),nvl(sal,0)) from emp;
    
    NVL2(COMM,COMM+NVL(SAL,0),NVL(SAL,0))
    -------------------------------------
                                      800
                                     1900
                                     1750
                                     2975
                                     2650
                                     2850
                                     2450
                                     3000
                                     5000
                                     1500
                                     1100
                                      950
                                     3000
                                     1300
                                      111
    
    已选择15行。

    nullif(expr1,expr2)

    如果两个参数值相等,则返回 null
    如果两个参数不等,则返回第一个表达式值

    SQL> select nullif(to_char(hiredate,'YYYY'),'1981') from emp;
    
    NULL
    ----
    1980
    
    
    
    
    
    
    1987
    
    
    1987
    
    
    1982
    
    
    已选择15行。
    
    SQL>

    COALESCE(EXPR1,EXPR2,EXPR3...EXPRn)
    从左往右数,遇到第一个非null值,则返回该非null值。多层判断

    SQL> select coalesce(sal+comm,sal+nvl(comm,0),nvl(sal,0)+nvl(comm,0)) from emp;
    
    COALESCE(SAL+COMM,SAL+NVL(COMM,0),NVL(SAL,0)+NVL(COMM,0))
    ---------------------------------------------------------
                                                          800
                                                         1900
                                                         1750
                                                         2975
                                                         2650
                                                         2850
                                                         2450
                                                         3000
                                                         5000
                                                         1500
                                                         1100
                                                          950
                                                         3000
                                                         1300
                                                          111
    
    已选择15行。
    
    SQL>
  • 相关阅读:
    深入理解计算机系统(第三版)作业题答案(第三章)
    深入理解计算机系统(第三版)作业题答案(第二章)
    greedy算法(python版)
    Dijkstra算法(Swift版)
    Breadth-first search 算法(Swift版)
    递归演示程序(swift)
    Node.js之异步流控制
    Node.js之单利模式
    Node.js之循环依赖
    一个完整的Node.js RESTful API
  • 原文地址:https://www.cnblogs.com/rusking/p/4051871.html
Copyright © 2011-2022 走看看