oracle实验15:单行函数-数据为空的函数

oracle实验15:操作数据为空的函数

综合数据类型函数

与空值(NULL)相关的一些函数,完成对空值(NULL)的一些操作。主要包括以下函数:

-NVL (表达式1, 表达式2) 函数功能是空值转换,把空值转换为其他值,解决空值问题。
     如果表达式1的值非空,就返回表达式1,如果表达式1的值为空,就返回表达式2,连个表达式的数据类型一定要相同。

-NVL2 (表达式1, 表达式2, 表达式3) 函数是对第一个参数进行检查。
     如果表达式1非空,则输出表达式2;如果表达式1为空,则输出表达式3。表达式1可以为任何数据类型。

-NULLIF (表达式1, 表达式2) 函数主要是完成两个参数的比较。
     当两个参数不相等时,返回值是第一个参数值;当两个参数相等时,返回值是空值。

-COALESCE (表达式1, 表达式2, ... 表达式n) 函数是对NVL函数的扩展。
    返回第一个不为空的参数,参数个数不受限制。

 

nvl

SQL> select ename,comm,nvl(comm,-1) from emp;

ENAME            COMM NVL(COMM,-1)                                             
---------- ---------- ------------                                             
SMITH                           -1                                             
ALLEN             300          300                                             
WARD              500          500                                             
JONES                           -1                                             
MARTIN           1400         1400                                             
BLAKE                           -1                                             
CLARK                           -1                                             
SCOTT                           -1                                             
KING                            -1                                             
TURNER              0            0                                             
ADAMS                           -1                                        
JAMES                           -1                                             
FORD                            -1                                             
MILLER                          -1                                             

已选择14行。

有奖金就返回奖金值,没有就返回-1。

 

nvl2

SQL> select sal+comm,sal+nvl(comm,0),nvl2(comm,'工资+奖金','纯工资')"收入类别" from emp;

SAL+COMM SAL+NVL(COMM,0) 收入类别                                            
------------ ------------------- ------                                           
                               800         纯工资                                              
      1900                1900         工资+奖金                                           
      1750                1750         工资+奖金                                            
                             2975         纯工资                                              
      2650                2650         工资+奖金                                           
                             2850         纯工资                                               
                             2450         纯工资                                               
                             3000         纯工资                                               
                             5000         纯工资                                              
      1500                1500         工资+奖金                                            
                             1100         纯工资                                       
                               950         纯工资                                               
                             3000         纯工资                                               
                             1300         纯工资                                              

已选择14行。

有奖金就返回工资+奖金,没有奖金就返回纯工资。

 

nullif

SQL> select ename,nullif(ename,'KING') from emp;

ENAME      NULLIF(ENA                                                          
---------- ----------                                                          
SMITH      SMITH                                                               
ALLEN      ALLEN                                                               
WARD       WARD                                                                
JONES      JONES                                                               
MARTIN     MARTIN                                                              
BLAKE      BLAKE                                                               
CLARK      CLARK                                                               
SCOTT      SCOTT                                                               
KING                                                                           
TURNER     TURNER                                                              
ADAMS      ADAMS                                                               
JAMES      JAMES                                                               
FORD       FORD                                                                
MILLER     MILLER                                                              

已选择14行。

如果员工的名字为KING就返回空,否则返回员工自己的名字。

 

coalesce

SQL> select coalesce(comm,sal,100) "奖金" from emp;

      奖金                                                                     
----------                                                                     
       800                                                                     
       300                                                                     
       500                                                                     
      2975                                                                     
      1400                                                                     
      2850                                                                     
      2450                                                                     
      3000                                                                     
      5000                                                                     
         0                                                                     
      1100                                                              
       950                                                                     
      3000                                                                     
      1300                                                                     

已选择14行。

如果有奖金就返回奖金,如果没有奖金就返回工资作为奖金,如果奖金和工资都为空就返回100作为奖金。

posted on 2013-06-25 21:21  不吃鱼的小胖猫  阅读(339)  评论(0编辑  收藏  举报