人生三大境界
衣带渐宽终不悔,为伊消得人憔悴。
昨夜西风凋碧树,独上高楼,望尽天涯路。
众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

Oracle入门基础(三)一一单行函数

SQL> --字符函数
SQL> select lower('Hello World') 转小写,upper('Hello World') 转大写,initcap('hello world') 首字母大写  from dual;

转小写      转大写      首字母大写                                                                   
hello world HELLO WORLD Hello World         
                                    
SQL> --substr(a,b) 从a中,第b位开始取
SQL> select substr('Hello World',4) 子串 from dual;
子串                                                                                                                                               
lo World                                                                        

SQL> --substr(a,b,c) 从a中,第b位开始取,取c位
SQL> select substr('Hello World',4,3) 子串 from dual;
子串                                                                                                                                                  
lo                                                                              

SQL> --length 字符数 lengthb 字节数
SQL> select length('北京') 字符,lengthb('北京') 字节 from dual
      字符       字节                                                                                                               
        2           4                                                                                               

SQL> --instr(a,b)
SQL> --在a中,查找b
SQL> select instr('Hello World','ll') 位置 from dual;
      位置                                                                                                                                       
         3                                                                      

SQL> --lpad 左填充  rpad 右填充
SQL> -- abcd  ---> 10位
SQL> select lpad('abcd',10,'*') 左,rpad('abcd',10,'*') 右 from dual;
左         右                                                                                                                   
******abcd abcd******                                                           

SQL> --trim 去掉前后指定的字符
SQL> select trim('H' from 'Hello WorldH')  from dual;

TRIM('H'FR                                                                                                                                       
ello World                                                                      

SQL> --replace
SQL> select replace('Hello World','l','*') from dual;

REPLACE('HE                                                                                                                                         
He**o Wor*d                                                                     

SQL> --四舍五入
SQL> select round(45.926,2) 一,round(45.926,1) 二,round(45.926,0) 三,round(45.926,-1) 四,round(45.926,-2) 五 from dual;
        一         二         三         四         五                                                   
     45.93       45.9         46         50          0                          

SQL> --截断
SQL> select trunc(45.926,2) 一,trunc(45.926,1) 二,trunc(45.926,0) 三,trunc(45.926,-1) 四,trunc(45.926,-2) 五 2* from dual
        一         二         三         四         五                                               
     45.92       45.9         45         40          0                          

SQL> --当前时间
SQL> select sysdate from dual;
SYSDATE                                                                                                                                        
29-9月 -16                                                                      

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY                                                                                                                     
2016-09-29 11:58:32                                                             

SQL> --昨天 今天  明天
SQL> select (sysdate-1) 昨天,sysdate 今天,(sysdate+1) 明天 from dual;

昨天           今天           明天                                                                              
28-9月 -16     29-9月 -16     30-9月 -16                                        

SQL> --计算员工的工龄:天 星期  月 年
SQL> select ename,hiredate,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,
  2                        (sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年  from emp;
ENAME      HIREDATE               天       星期         月         年              
SMITH      17-12月-80     13070.5013 1867.21448 435.683378 35.8095927           
      
SQL> select sysdate+hiredate from emp;
ORA-00975: 不允许日期 + 日期 


SQL> --months_between
SQL> select ename,hiredate,(sysdate-hiredate)/30 一,months_between(sysdate,hiredate) 二 from emp;
ENAME      HIREDATE               一         二                                                    
SMITH      17-12月-80     435.683431  429.40332                                 

SQL> --53个月后
SQL> select add_months(sysdate,53) from dual;                                                          
28-2月 -21                                                                      

SQL> --last_day
SQL> select last_day(sysdate) from dual;

LAST_DAY(SYSDA                                                                                                                                
30-9月 -16                                                                      

SQL> --next_day
SQL> --下一个星期四
SQL> select next_day(sysdate,'星期四') from dual;

NEXT_DAY(SYSDA                                                                                                                              
06-10月-16                                                                      

SQL> --下一个星期五
SQL> select next_day(sysdate,'星期五') from dual;

NEXT_DAY(SYSDA                                                                                                                               
30-9月 -16                                                                      

SQL> select next_day(sysdate,'礼拜五') from dual;
ORA-01846: 周中的日无效 

SQL> next_day函数的应用:每个星期一自动备份表中的数据
SQL> 1、分布式数据库
SQL> 2、触发器 快照

SQL> select round(sysdate,'month'),round(sysdate,'year') from dual;
ROUND(SYSDATE, ROUND(SYSDATE,                                                                                                  
01-10月-16     01-1月 -17                                                       

SQL> --2016-09-29 12:18:12今天是星期四
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss今天是day') from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss今天是day') from dual

ORA-01821: 日期格式无法识别 


SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI                                                                                          
2016-09-29 12:20:13今天是星期四                                                 

SQL> --查询员工的薪水:两位小数、千位符、本地货币代码
SQL> select to_char(sal,'L9,999.99') from emp;

TO_CHAR(SAL,'L9,999                                                                                                                     
           ¥800.00                                                                                                                  

SQL> --nvl2(a,b,c) 当a=null的时候,返回c;否则返回b
SQL> selec sal*12+nvl2(comm,comm,0) from emp;
SP2-0734: 未知的命令开头 "selec sal*..." - 忽略了剩余的行。

SQL> select sal*12+nvl2(comm,comm,0) from emp;

SAL*12+NVL2(COMM,COMM,0)                                                        
 15600                                                        

SQL> --nullif(a,b) 当a=b的时候,返回null;否则返回a
SQL> select nullif('abc','abcd') 值 from dual;
值                                                                                                                                                         
abc                                                                                
                                                            

SQL> --coalesce 从左到右 找到第一个不为null的值
SQL> select comm,sal,coalesce(comm,sal) "第一个不为null的值"
  2  from emp;
      COMM     SAL     第一个不为null的值                                                                              
                      800                800                                        
       300       1600                300                                        

SQL> --给员工涨工资,总裁1000 经理800 其他400
SQL> select ename,job,sal 涨前,
  2         case job when 'PRESIDENT' then sal+1000
  3                  when 'MANAGER' then sal+800
  4                  else sal+400
  5          end 涨后
  6  from emp;

ENAME      JOB             涨前       涨后                                                                                                                                                              
---------- --------- ---------- ----------                                                                                                                                                              
SMITH      CLERK            800       1200                                                                                                                                                              
ALLEN      SALESMAN        1600       2000                                                                                                                                                              


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

ENAME      JOB             涨前       涨后                                                                                                                                                              
---------- --------- ---------- ----------                                                                                                                                                              
SMITH      CLERK            800       1200                                                                                                                                                              
ALLEN      SALESMAN        1600       2000                                                                                                                                                              
WARD       SALESMAN        1250       1650                                                                                                                                                             
posted @ 2019-09-17 21:00  一剑霜寒十九洲  阅读(95)  评论(0编辑  收藏  举报