• oracle 的单行函数


    1、字符函数:initcap(注意一下)

    SQL> select lower('hellO WORld') 转小写,upper('hellO WORld') 转大写,initcap('hello world') 首字母大写
      2   from dual;
    
    转小写                 转大写                 首字母大写
    ---------------------- ---------------------- ----------------------
    hello world            HELLO WORLD            Hello World
    SQL> select lower('hellO WORld') 转大写,upper('hellO WORld') 转小写,initcap('hello worlD') 首字母大写 from dual;
    
    转大写                 转小写                 首字母大写
    ---------------------- ---------------------- ----------------------
    hello world            HELLO WORLD            Hello World

    2、substr(a,b) 从a中,第b位开始取,取右边所有的字符: 可以取到第b位

    SQL> select substr('Hello World',4)  from dual;
    
    SUBSTR('HELLOWOR
    ----------------
    lo World
    SQL> select substr(1111,2) from dual;     对数字也适用
    
    SUBSTR
    ------
    111

    substr(a,b,c) 从a中,第b位开始取,取c位:

    SQL> select substr('Hello World',4,4)  from dual;            空格也算一位
    
    SUBSTR('
    --------
    lo W

    3、length 字符数 lengthb 字节数:

    SQL> select length('Hello World') 字符数, lengthb('Hello World') 字节数 from dual;
    
        字符数     字节数
    ---------- ----------
            11         11
    SQL> select length('北京') 字符数, lengthb('北京') 字节数 from dual;
    
        字符数     字节数
    ---------- ----------
             2          6

    4、在母串中查找子串,找到返回下标(从1开始),否则返回0:

    SQL> select instr('Hello World','ll')  from dual;
    
    INSTR('HELLOWORLD','LL')
    ------------------------
                           3
    SQL> select instr('Hello World','lle')  from dual;
    
    INSTR('HELLOWORLD','LLE')
    -------------------------
                            0

    5、lpad 左填充  rpad 右填充:以及其他填充

    SQL> select lpad('abcd',10,'*') 左,rpad('abcd',10,'*') 右 from dual;
    
    左                   右
    -------------------- --------------------
    ******abcd           abcd******
    SQL> select replace('Hello World','l','*') from dual;
    
    REPLACE('HELLOWORLD','
    ----------------------
    He**o Wor*d

    6、trim 去掉前后指定的字符:

    SQL> select trim('H' from 'Hello WorldH') from dual;
    
    TRIM('H'FROM'HELLOWO
    --------------------
    ello World
    
    SQL> select trim('l' from 'Hello WorldH') from dual;
    
    TRIM('L'FROM'HELLOWORLDH
    ------------------------
    Hello WorldH
    
    SQL> select trim('H' from 'Hello WorldHe') from dual;
    
    TRIM('H'FROM'HELLOWORLDH
    ------------------------
    ello WorldHe
    
    SQL> select trim('H' from 'eHello WorldH') from dual;
    
    TRIM('H'FROM'EHELLOWORLD
    ------------------------
    eHello World

     7、select replace('Hello World','l','*') from dual;

    SQL> select replace('Hello World','l','*') from dual;
    
    REPLACE('HELLOWORLD','
    ----------------------
    He**o Wor*d

     8、round (xx,数字)前面的xx进行小数点数字前后四舍五入:

    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

    9、日期函数  sysdate (系统日期):

    SQL> select sysdate from dual;
    
    SYSDATE
    --------------
    06-9月 -18
    SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
    
    TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'
    --------------------------------------
    2018-09-06 08:31:42
    SQL> select systimestamp from dual;              时间戳
    
    SYSTIMESTAMP
    ---------------------------------------------------------------------------
    06-9月 -18 08.32.08.704000 上午 +08:00
    SQL> select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss*ff') from dual;
    
    TO_CHAR(SYSTIMESTAMP,'YYYY-MM-DDHH24:MI:SS*FF')
    ----------------------------------------------------------
    2018-09-06 08:32:55*607000

     昨天,今天,明天:

    SQL> select (sysdate-1) 昨天, sysdate 今天, (sysdate+1) 明天 from dual;
    
    昨天           今天           明天
    -------------- -------------- --------------
    08-9月 -18     09-9月 -18     10-9月 -18

    员工的工龄

    SQL>  select ename,hiredate,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,
      2   (sysdate-hiredate)/30 月,(sysdate-hiredate)/3653  from emp;
    
    ENAME                HIREDATE               天       星期         月         年
    -------------------- -------------- ---------- ---------- ---------- ----------
    SMITH                17-12月-80     13780.3844 1968.62634 459.346146 37.7544777
    ALLEN                20-2月 -81     13715.3844 1959.34063 457.179479 37.5763955
    WARD                 22-2月 -81     13713.3844 1959.05491 457.112813 37.5709161
    JONES                02-4月 -81     13674.3844 1953.48348 455.812813 37.4640668
    MARTIN               28-9月 -81     13495.3844 1927.91205 449.846146 36.9736558
    BLAKE                01-5月 -81     13645.3844 1949.34063 454.846146 37.3846147
    CLARK                09-6月 -81     13606.3844  1943.7692 453.546146 37.2777654
    SCOTT                19-4月 -87     11466.3844 1638.05491 382.212813 31.4147517
    KING                 17-11月-81     13445.3844  1920.7692 448.179479 36.8366695
    TURNER               08-9月 -81     13515.3844  1930.7692 450.512813 37.0284503
    ADAMS                23-5月 -87     11432.3844 1633.19777 381.079479  31.321601
    
    ENAME                HIREDATE               天       星期         月         年
    -------------------- -------------- ---------- ---------- ---------- ----------
    JAMES                03-12月-81     13429.3844 1918.48348 447.646146 36.7928339
    FORD                 03-12月-81     13429.3844 1918.48348 447.646146 36.7928339
    MILLER               23-1月 -82     13378.3844 1911.19777 445.946146 36.6531079
    
    已选择14行。

    日期的最后一天:

    SQL> select last_day(sysdate) from dual;
    
    LAST_DAY(SYSDA
    --------------
    30-9月 -18

    MONTHS_BETWEEN 计算工龄

    SQL> select (sysdate-hiredate)/30 一,MONTHS_BETWEEN(sysdate,hiredate) 二
      2  from emp;
    
            一         二
    ---------- ----------
    459.346217 452.754404
    457.179551  450.65763
    457.112884 450.593113
    455.812884 449.238275
    449.846217 443.399565
    454.846217 448.270533
    453.546217        447
    382.212884 376.689888
    448.179551 441.754404
    450.512884 444.044726
    381.079551 375.560855
    
            一         二
    ---------- ----------
    447.646217 441.206017
    447.646217 441.206017
    445.946217 439.560855
    
    已选择14行。

     114月后:

    SQL> select add_months(sysdate,114) from dual;
    
    ADD_MONTHS(SYS
    --------------
    09-3月 -28

    从今天开始算(2018.9.9星期一),下一个星期一:

    SQL> select next_day(sysdate,'星期一') from dual;
    
    NEXT_DAY(SYSDA
    --------------
    10-9月 -18

    对日期进行四舍五入:

    select round(sysdate,'month') 一,round(sysdate,'year') 二 from dual;

      一             二
    -------------- --------------
    01-9月 -18 01-1月 -19

    显式转换:

    SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual;
    
    TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS"今天是"DAY')
    --------------------------------------------------------------------------------
    2018-09-09 09:27:35今天是星期日

    查询员工的薪水: 货币符号,两位小数,千位符:

    SQL> select sal, to_char(sal,'L9,999.99') from emp;
    
           SAL TO_CHAR(SAL,'L9,999.99')
    ---------- --------------------------------------
           800800.00
          16001,600.00
          12501,250.00
          29752,975.00
          12501,250.00
          28502,850.00
          24502,450.00
          30003,000.00
          50005,000.00
          15001,500.00
          11001,100.00
    
           SAL TO_CHAR(SAL,'L9,999.99')
    ---------- --------------------------------------
           950950.00
          30003,000.00
          13001,300.00
    
    已选择14行。

    nvl2(a,b,c) 当a=null时,返回c,否则返回b:

    SQL> select sal,nvl(comm,0),sal*12+nvl2(comm,comm,0)  from emp;
    
           SAL NVL(COMM,0) SAL*12+NVL2(COMM,COMM,0)
    ---------- ----------- ------------------------
           800           0                     9600
          1600         300                    19500
          1250         500                    15500
          2975           0                    35700
          1250        1400                    16400
          2850           0                    34200
          2450           0                    29400
          3000           0                    36000
          5000           0                    60000
          1500           0                    18000
          1100           0                    13200
    
           SAL NVL(COMM,0) SAL*12+NVL2(COMM,COMM,0)
    ---------- ----------- ------------------------
           950           0                    11400
          3000           0                    36000
          1300           0                    15600
    
    已选择14行。

    nullif(a,b) 当a=b时,返回null,否则返回a:

    SQL>  select nullif('abc','abc') from dual;
    
    NULLIF
    ------
    SQL> select nullif('abc','abdc') from dual;
    
    NULLIF
    ------
    abc

    COALESCE 从左至右找到第一个不为null的值:

    SQL> select comm,sal,COALESCE(comm,sal) from emp;
    
          COMM        SAL COALESCE(COMM,SAL)
    ---------- ---------- ------------------
                      800                800
           300       1600                300
           500       1250                500
                     2975               2975
          1400       1250               1400
                     2850               2850
                     2450               2450
                     3000               3000
                     5000               5000
             0       1500                  0
                     1100               1100
    
          COMM        SAL COALESCE(COMM,SAL)
    ---------- ---------- ------------------
                      950                950
                     3000               3000
                     1300               1300
    
    已选择14行。

    根据职位涨工资 总裁1000 经理800 其他400:

    SQL> ed
    已写入 file afiedt.buf
    
      1  select ename,job,sal 涨前薪水, case job when 'PRESIDENT' then sal+1000
      2                                              when 'MANAGER' then sal+800
      3                                              else sal+400
      4                                     end 涨后薪水
      5*     from emp
    SQL> /
    
    ENAME                JOB                  涨前薪水   涨后薪水
    -------------------- ------------------ ---------- ----------
    SMITH                CLERK                     800       1200
    ALLEN                SALESMAN                 1600       2000
    WARD                 SALESMAN                 1250       1650
    JONES                MANAGER                  2975       3775
    MARTIN               SALESMAN                 1250       1650
    BLAKE                MANAGER                  2850       3650
    CLARK                MANAGER                  2450       3250
    SCOTT                ANALYST                  3000       3400
    KING                 PRESIDENT                5000       6000
    TURNER               SALESMAN                 1500       1900
    ADAMS                CLERK                    1100       1500
    
    ENAME                JOB                  涨前薪水   涨后薪水
    -------------------- ------------------ ---------- ----------
    JAMES                CLERK                     950       1350
    FORD                 ANALYST                  3000       3400
    MILLER               CLERK                    1300       1700
    
    已选择14行。

    另外一种方法:

    SQL> ed
    已写入 file afiedt.buf
    
      1  select ename,job,sal 涨前薪水,decode(job,'PRESIDENT',sal+1000,
      2                                               'MANAGER', sal+800,
      3                                                         sal+400)涨后薪水
      4*     from emp
    SQL> /
    
    ENAME                JOB                  涨前薪水   涨后薪水
    -------------------- ------------------ ---------- ----------
    SMITH                CLERK                     800       1200
    ALLEN                SALESMAN                 1600       2000
    WARD                 SALESMAN                 1250       1650
    JONES                MANAGER                  2975       3775
    MARTIN               SALESMAN                 1250       1650
    BLAKE                MANAGER                  2850       3650
    CLARK                MANAGER                  2450       3250
    SCOTT                ANALYST                  3000       3400
    KING                 PRESIDENT                5000       6000
    TURNER               SALESMAN                 1500       1900
    ADAMS                CLERK                    1100       1500
    
    ENAME                JOB                  涨前薪水   涨后薪水
    -------------------- ------------------ ---------- ----------
    JAMES                CLERK                     950       1350
    FORD                 ANALYST                  3000       3400
    MILLER               CLERK                    1300       1700
    
    已选择14行。

    ---恢复内容结束---

  • 相关阅读:
    ASP.NET Boilerplate
    Financial.IPmt/Financial.PPmt
    VB内部函数(三)——财务函数
    Convert VB.NET to C#
    MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)
    Oauth2.0客户端服务端示例
    一张图搞定OAuth2.0
    使用JAVA实现的一个简单IOC注入实例
    谈谈对Spring IOC的理解
    秒懂,Java 注解 (Annotation)你可以这样学
  • 原文地址:https://www.cnblogs.com/scw123/p/9591905.html
Copyright © 2020-2023  润新知