Oracle常用函数
一.对数字精度处理
1.trunc(截取字符串)
trunc(number[,decimals])
number 待做截取处理的数值,decimals 表明小数点要保留的位数,省略则截取全部小数
(decimals可为负数,当为负数时,数值以小数点左边开始截取,截取后用0替换)
例: select trunc(123.4) from dual --123;
select trunc(123.45,1) from dual --123.4;
select trunc(128.4,-1) from dual --120;
trunc(date[,fmt])
date 为输入的一个日期,fmt为日期格式,用以指定的日期按格式截取。
例:select trunc(sysdate,'yyyy') -- 返回当年第一天
select trunc(sysdate,'mm') -- 返回当月第一天
select trunc(sysdate,'D') -- 返回当前星期第一天
2.round(四舍五入)
round(number[,decimalPlace])
number:处理的数值 decimalPlace:要四舍五入的小数点位置(同trunc)
例: select round(123.4) from dual --120;
select round(123.45,1) from dual --123.5;
select round(128.4,-1) from dual --130;
3.ceil、floor
ceil(number) 获取比number大的最小整数。例:ceil(123.4) -- 124
floor(number) 获取比number小的最大整数。例:floor(123.4) -- 123
4.modmod(m,n) 表示m除以n的余数,若n=0,则返回m。select mod(7,5) from dual -- 2;
5.powerpower(m,n) 表示m的n次方.。select power(3,2) from dual --9;
6.signsign(n) n=0返回0,n>0返回1,n<0返回-1。select sign(12) from dual --1;
7.sqrtsqrt(n) n的平方根。select sqrt(25) from dual --5;
二、对字符进行处理
concat(char1,char2) 连接char1和char2 select concat('11','22') fron dual; 1122
initcap(char) 把每个字符串的第一个字符换成大写 select initicap('mr.ecop') from dual; Mr.Ecop
lower/upper(char) 整个字符串换成小/大写
select lower/upper('MR.ecop') from dual; mr.ecop
lpad(str1,n,str2) 左补n个str2字符,不够循环补充 select lpad('11',8,'23') from dual; 23232311
rpad(str1,str2) 右补n个str2字符,不够循环补充 select rpad('11','23') from dual; 11232323
ltrim(string,'str') 从左边删除字符,string可为字段或字符串,'str'为要删除字符串集
SELECT LTRIM('abcdab','a') FROM DUAL; bcdab 若为b,结果仍为abcdab,不能跳删
rtrim(string,'str') 从右边删除字符,string可为字段或字符串,'str'为要删除字符串集
SELECT RTRIM('abcdab','b') FROM DUAL; abcda 若为a,结果仍为abcdab,不能跳删
replace(char,str1,str2) 字符串中所有str1换成str2 select replace('Scott','s','Boy') from dual; Boycott
substr(char,m,n) 取出从m字符开始的n个字符的子串 select substr('ABCDEF',2,2) from dual; CD
length(char) 求字符串的长度 select length('ACD') from dual; 3
|| 并置运算符 select 'ABCD'||'EFGH' from dual; ABCDEFGH
INSTR (string,set[,start[,occurrence] ] )
该命令“string”中从“start”位置开始查找字符集合的位置,再查找“set”出现的第一次、第二次等等的“occurrence”(次数)。“start”的值也可以是负数,代表从字符串结尾开始向反方向搜索。该函数也用于数字和日期数据类型。
示例 SELECT INSTR('aptech is aptech','ap',1,2) FROM DUAL; 11 出现第二次的位置
soundex(char) 返回发音类似拼写不同的字
ASCII(char) 返回字符串最左侧的ASCII码
TRANSLATE(string,from_str,to_str) 返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。
SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual; 123456ghij
三、日期进行处理
sysdate 当前日期和时间 select sysdate from dual;
last_day 本月最后一天 select last_day(sysdate) from dual;
add_months(d,n) 当前日期d后推n个月 select add_months(sysdate,2) from dual;
months_between(d,n) 日期d和n相差月数
select months_between(sysdate,to_date('20020812','YYYYMMDD')) from dual;
next_day(d,day) d后第一周指定day的日期 select next_day(sysdate,'星期一') from dual;
日期与nls有关,英文则为 'Monday'
SELECT * FROM v$nls_parameters;SIMPLIFIED CHINESE
四、特殊格式日期处理
Y或YY或YYY 年的最后一位,两位,三位 select to_char(sysdate,'YYY') from dual;
Q 季度,1-3月为第一季度 select to_char(sysdate,'Q') from dual;
MM 月份数 select to_char(sysdate,'MM') from dual;
RM 月份的罗马表示 select to_char(sysdate,'RM') from dual; IV
month 用9个字符表示的月份名 select to_char(sysdate,'month') from dual;
ww 当年第几周 select to_char(sysdate,'ww') from dual;
w 本月第几周 select to_char(sysdate,'w') from dual;
DDD 当年第几天,一月一日为001,二月一日032 select to_char(sysdate,'DDD') from dual;
DD 当月第几天 select to_char(sysdate,'DD') from dual;
D 周内第几天 select to_char(sysdate,'D') from dual; 如 sunday
DY 周内第几天缩写 select to_char(sysdate,'DY') from dual; 如 sun
hh12 12小时制小时数 select to_char(sysdate,'hh12') from dual;
hh24 24小时制小时数 select to_char(sysdate,'hh24') from dual;
Mi 分钟数 select to_char(sysdate,'Mi') from dual;
ss 秒数 select to_char(sysdate,'ss') from dual;
select to_char(sysdate,'YYYY-MM-DD HH:24:mi:ss') from dual;
select to_date('1970-01-01 00:00:01','yyyy-mm-dd hh24:mi:ss') from dual;
to_number() 将合法的数字字符串 select to_number('88877') from dual; 88877
to_char() 将数字转换为字符串 select to_char(88877) from dual; '88877'
五、表达式条件匹配值
decode(条件,值1,翻译值1,值2,翻译值2,缺省值)
相当于if 条件 = 值1 then return翻译值1; elsif条件 = 值2then return翻译值2; else return缺省值; end if;