oracle>functions

--函数  founations()

SQL> select ename,empjob,sal 涨前薪水, decode(empjob,'PRESIDENT',sal+1000,
  2                                               'MANAGER',sal+800,
  3                                                      sal+400) 涨后薪水
  4  from emp;

   select ename,empjob,sal 涨前薪水, case empjob when 'PRESIDENT' then sal+1000
  2                                          when 'MANAGER' then sal+800
  3                                          else sal+400
  4                                  end 涨后薪水
  5* from emp

SQL> --COALESCE  从左至右 依次检查输入的参数,返回第一个不是NULL的参数,只有当传入COALESCE函数的所有的参数都是NULL的时候,函数才会返回NULL。
SQL> select comm,sal,COALESCE(comm,sal) from emp;

      COMM        SAL COALESCE(COMM,SAL)                                       
---------- ---------- ------------------                                        
                     800                800                                       
       300       1600                300

NULL指的是空值,或者非法值。

NVL (expr1, expr2)->expr1为NULL,返回expr2;不为NULL,返回expr1。注意两者的类型要一致
NVL2 (expr1, expr2, expr3) ->expr1不为NULL,返回expr2;为NULL,返回expr3。expr2和expr3类型不同的话,expr3会转换为expr2的类型
NULLIF (expr1, expr2) ->相等返回NULL,不等返回expr1
*/

SQL> --nvl2(a,b,c) :当a=null时,返回c,否则返回b    虑空 函数                                      
SQL> select sal*12+nvl2(comm,comm,0)
  2  from emp;

SAL*12+NVL2(COMM,COMM,0)                                                       
------------------------                                                       
                    9600

SQL> --nullif(a,b) 当a=b时,返回null,否则返回a
SQL> select nullif('abcd','abcd')                                      --'  '  代表字符串   "   " 代表列
  2  from dual;

NULL                                                                           
----

SQL> --nvl2(a,b,c) :当a=null时,返回c,否则返回b
SQL> select sal*12+nvl2(comm,comm,0)
  2  from emp;

SAL*12+NVL2(COMM,COMM,0)                                                       
------------------------                                                       
                    9600

组函数会自动滤空      高
select count(*),count(nvl(comm,0))  from emp    
SQL> /

  COUNT(*) COUNT(NVL(COMM,0))                                                                                                                        
---------- ------------------                                                                                                                        
        14                 14

 

SQL> --instr: 在母串中,查找子串,如果找到返回下标,否则返回0   
SQL> select instr('Hello World','ll') from dual;

INSTR('HELLOWORLD','LL')                                                       
------------------------                                                       
                       3

ROUND(数字,保留的小数点数)
 select ROUND(45.926, 2) 一,ROUND(45.926, 1) 二, ROUND(45.926, 0) 三,
         ROUND(45.926, -1) 四, ROUND(45.926, -2) 五,ROUND(45.926, -3)
  from dual;

        一         二         三         四         五         六                         
---------- ---------- ---------- ---------- ---------- ----------                         
     45.93       45.9         46         50          0          0                                                                                              

 

用to_char函数,可以把一个日期转为一个字符串,并且能制定格式   和dataformat有异曲同工之妙
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY                                                            
-------------------                                                            
2013-01-22 14:33:54

使用当前用户该  global表示全局的 session表示当前会话    这样才不会因为格式错误,而查不到
SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd';
会话已更改。

select * from emp  where hiredate='1981-11-17';

                                                                                      SQL> select

(sysdate-1) 昨天,sysdate 今天,(sysdate+1) 明天  
  2  from dual;

昨天           今天           明天                                             
-------------- -------------- --------------                                   
21-1月 -13     22-1月 -13     23-1月 -13

SQL> --员工的工龄      得到的是个近似值
SQL> select ename,hiredate,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,
  2                        (sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年
  3  from emp;

原文地址:https://www.cnblogs.com/nauy/p/2879335.html