zoukankan      html  css  js  c++  java
  • 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                                                                                                                                                             
    
  • 相关阅读:
    Python学习笔记(三)
    Python学习笔记(二)
    GDUFE ACM1159
    GDUEFE ACM1003 练手
    GDUFE ACM1033
    GDUFE ACM1128
    GDUFE ACM1002
    EDUFE ACM1050
    GDUFE ACM1007
    GDUFE ACM1003
  • 原文地址:https://www.cnblogs.com/Aaron-007/p/12814628.html
Copyright © 2011-2022 走看看