zoukankan      html  css  js  c++  java
  • oracle函数

    普通函数

    -----------------------------------------------------------------------------

    数字类函数

    正负值类:

    ABS

    绝对值,返回值一定大于等于0
    SIGN
    返回值只有1(正数)、-1(负数)和0(零)

    舍入类的函数
    CEL,向上取整
    ceil(1.06)=2,ceil1.9)=2
    FLOOR,向下取整
    floor(1.06)=1, floor(1.9)=1
    ROUND,四舍五入
    round(1.06)=1, round(1.9)=2. round(15.06,1)=15.1, round(15.06,-1)=20
    TRUNC,截断
    trunc(1.06)=1, trunc(1.9)=1, trunc(15.16,1)=15.1, trunc(15.16,-1)=10

    求余类的函数
    MOD,求余
    经典:mod(n2,n1)=n2-n1* FLOOR(n2/n1)
    oracle: mod(n2, n1)=sign(n2*(abs(n2)-abs(n1)*FLOOR(abs(n2)/abs(n1)))
    ・n2为正数:mod(13,5)=3,mod(13.12,5)=3.12,mod(13.12,5.1)=2.92,mod(13.12,-5)=3.12
    n2为负数:mod(-13,5)=-3,mod(-13.12,5.1)=-2.92
    Oracle里的mod求余和传统意义上的mod函数不一样
    REMAINDER,求余2
    ・经典: remainder(n2.n1)=n2-n1* ROUND(n2/n1)
    oracle remainder(n2, n1)=n2-n1*(case when ABS(2/n1)-05=TRUNC(ABS(n2/n1))and
    mod(ROUND(AB$( 2/n1)). 2)=1 then ROUND(n2/n1)-SIGN(2/n1)else ROUND(n2/n1)end
    n2为正数: remainder(13,5)=-2, remainder(113)=1
    ・n2为负数: remainder(-13,5)=2, remainder(-13.12,5.1)=2.18
    通常我们使用MOD,而不使用 REMAINDER

    幂指类函数
    幕函数: POWER
    power(2,10)=1024
    指数函数:EXP
    exp(1)=2.718281828459045
    对数函数:LN、LOG
    ・In(2.718281828459045)=1
    og(2.8)=3,log(2,1024)=10

    ------------------------------------------------------

    日期类

    取日期值的某一部分
    TO CHARE函数
    假定 sysdate为2013-04-1313:06:28
    to_char(sysdate, yyyy)=2013, to_char(sysdate, ss) =28
    EXTRACT函数
    extract(MONTH from date 2013-01-312)=1
    extract(SECOND from timestamp 2013-08-04 09:00:05)=5
    YEAR, MONTH, DAY, HOUR, MINUTE, SECOND

    计算日期加法
    直接加上一个数字,表示在当前日期上增加的时长
    date'2013-01-01'+30=date'2013-01-31
    date'2013-01-01'+29+1/12=to_date('2013-01-3002yy-mm-dh24)
    ADD MONTHS函数
    add months(date2010-02-27,24)=date'2012-02-27
    add months(date 2012-02-29, 24)=add months(date 2012-02-28, 24)
    add months(date 2010-02-28, 24)=?

    计算日期加法
    INTERVAL表示法
    date 1900-01-01+interval' 113-2"year(3)to month=date 2013-03-01
    date 2013-04-17"+ interval1 23'day to hour=to_date(2013-04-18 23, yyyy-mm-dd hh24)
    NUMTOYMINTERVALINUMTODSINTERVAL
    date 2013-01-28+ numtodsinterval31, DAY")=date 2013-02-28
    date 2013-01-31+numtodsinterval(28, DAY)=Date'2013-02-28
    date 2013-01-28"+numtoyminterval(1, month)=date 2013-02-28
    date 2013-01-31+numtoyminterval(1, month)=?

    计算日期差值
    直接相减,得天数
    date'2013-01-31'-to_date(2013-01-0112:00:00,yy-mm-dh24:miss)=29.5
    MONTHS_ BETWEEN函数
    months between(date 2013-01-31, to date( 2010-11-01 12, yyyy-mm-dd hh24)=26.9516129
    SCOTTOLW. lw2> select 29.5/31 from dual
    29.5/31
    .951612903

    日期舍入
    TRUNC函数
    trunc(to date( 12: 35: 35, hh24: i: s). MI)=to date(12: 35:00, hh24: i: s)
    trunc(to date( 12: 35: 35, hh24: mi: s), HH)=to date(12: 00, hh24: mi)
    ROUND函数
    round(date'2013-04-17,MM)=date'2013-05-01
    round(o date( 12:35: 25, hh24: mi: s, MI)=to date( 12: 35:00, hh24: mi: ss)
    round( o date( 12: 35: 35 h24: m: s), M)=to date(12: 36:00, hh24: mi: s)

    其他常规函数
    ー NEXT DAY
    ー LAST DAY

    --------------------------------------------------------------------------

    字符类单行函数

    大小写转换
    INITCAP
    LOWER
    UPPER
    字符与ASCⅡ码转换
    ASCII
    CHR

    字符串连接
    CONCAT函数,同操作符
    SCOTT@lwlw2> set heading off
    SCOTT@lwlw2> select 'last'||'winner'||''from dual
    lastwinner
    SCOTT@lwlw2> select concat(concat('last','winner'), ")from dual
    lastwinner
    字符串填补
    LPAD、RPAD函数
    lpad(1234,95)='5551234'
    lpad(1234,3,"5)='123'
    lpad(1234,9,"56)='565651234'
    lpad(1234,9,数)=' 数数1234' --汉字前有个空格

    字符串修剪
    LTRIM和 RTRIM函数
    默认从左或右去掉空格
    从左或右去掉第一个参数中的字符。直到该字符不等于第二个参数中的任意字符
    Itrim('aabdwecab, ' abcd')='wecab'
    rtrim('Today is a good day.  ')='Today is a good day.'
    TRIM函数
    默认去掉两端的空格
    从左或/和右边去掉第二个参数指定的字符,仅一个
    SCOTT@lwlw2> select trim('abcd' from 'aabdwecab')from dual;
    第1行出现错误
    ORA-30001:截取集仅能有一个字符
    SCOTT@lw lw2> select trim('a'from'aabdwecaba') from dual;
    bdwecab

    取子串
    SUBSTR函数
    SCOTT@lwlw2> select substr(lastwinner@dataguru', 5)from dual;
    winner@dataquru
    SCOTT@lwlw2> select substr( lastwinner@dataguru' 5,6) from dual;
    wInner
    SCOTT@wlw2> select substr('lastwinner@dataguru',-5,6)from dual;
    aguru
    SCOTT@lwlw2> select substr('lastwinner@dataguru, -5, 3)from dual;
    agu

    查找替换
    INSTR函数
    SCOTT@lwlw2> select instr('lastwinner@dataguru', 'win' )from dual;

    5
    REPLACE函数
    select replace('Today is a good day. ',' ') from dual;
    select replace('Today is a good day. ',' ','##') from dual;
    TRANSLATE函数
    select translate('Today is a good day. ',' ','##') from dual;
    select translate('(+0086-)010-68345678','0(+)-','0') from dual;

    select translate('1last34winn00er97是剑2破53冰45山4的5作5者之4453一45','l0123456789','l') from dual;

    通用类单行函数

    GREATEST
    可跟若干参数(类型可为数字、字符、日期等),返回其中的最大值,若参数中有一个NUL
    则返回NUL
    以第一个参数的类型为准对其他参数做可能的隐式类型转换
    注意不要和MAX搞混
    select greatest(sysdate,date'2021-12-31',to_date('13:12','mi:hh')+interval '1' year) from dual;
    2022/9/1 12:13:00
    LEAST
    基本同上,只不过求的是最小值,并且不要和min搞混

    转换类单行函数

    CAST
    TO CHAR
    TO DATE
    TO NUMBER
    TO TIMESTAMP
    DECODE

    decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)

    decode(字段或字段的运算,值1,值2,值3)

    这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3

    NVL
    nvl(a,b)    if(a==null)return b else return a
    NVL2
    nvl2(a,b,c) if (a==null)return c else return b:
    COALESCE
    返回参数中第个非NULL的值。若参数都是NULL,则返回NULL

  • 相关阅读:
    nodejs发送http请求
    Codeforces Round #655 (Div. 2)
    闇の連鎖 树上LCA + 树上差分
    Tree 换根dp
    「水」悠悠碧波 kmp
    HH的项链
    Educational Codeforces Round 90 (Rated for Div. 2)
    巡逻(论为什么第二次求直径要用dp)
    Codeforces Round #651 (Div. 2)
    Treap板子
  • 原文地址:https://www.cnblogs.com/lag1/p/15237190.html
Copyright © 2011-2022 走看看