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

 

posted @ 2021-09-07 10:50  十方劫  阅读(269)  评论(0编辑  收藏  举报