oracle之函数

来源:互联网 发布:sql 日期格式 编辑:程序博客网 时间:2024/06/04 21:24

1、 数值函数
(1)四舍五入函数round (n,m)
select round(23.4), round(23.45,1), round(23.45, -1) from dual;
输出:23 23.5 20

(2) trunc(n,m) 函数:不进位
select trunc (23.6) ,trunc(23.567,2) ,trunc(23.567,-1) from dual;
输出:23 23.56 20

(3) 取整函数
ceil(n) :向上取整; floor(n) :向下取整
select ceil(23.45), floor (23.45) from dual;
输出: 24 23

(4) 常用计算
abs(n):取绝对值
select abs(23.45), abs(-23), abs(0) from dual;
输出:23.45 23 0

mod(m,n): 取余,如果m,n中有一个值为null值,则结果返回null值。
select mod(5,2) from dual;
输出:1

power(m,n):返回m的n次幂
select power(2,3), power(null,2) from dual;
输出:8

sqrt(n):求平方根
select sqrt(16) from dual;
输出:4

三角函数:sin(n), asin(n), cos(n) ,acos(n) ,tan(n) ,atan(n) (n为弧度)
如:select sin(3.5) from dual;

2、 字符函数
(1) upper(char), lower(char), initcap(char):大小写转换函数
select upper(‘abde’), lower(’ ADe’), initcap(‘asd’) from dual;
输出:ABDE ade Asd

substr(char,[m[,n]]):获取子字符串函数,m是截取的首字母位置,m=0,表示从字符串的首字母开始截取;m为负数,表示从字符串的尾部开始截取,n可以省略,表示截取到字符串结束。
select substr(‘abcde’, 2,3) ,substr(‘abcde’,2), substr(‘abcde’,-2,1) from dual;
输出:bcd bcde d

(2) length(char):获取字符串长度
select length(‘acd ‘) from dual;
输出:4

concat(char1,char2):字符串连接函数
select concat(‘ab’, ‘cd’) from dual;
输出:abcd

功能同 select ‘ab’ || ‘cd’ from dual;

(3) trim(c2 from c1):去除字符函数
select trim (‘a’ from ‘abcde’) from dual;
输出:bcde

ltrim(c1, c2): 从c1的头部去除c2字符
select ltrim (‘ababaa’ ,’a’) from dual;
输出:babaa

rtrim(c1, c2): 从c1的尾部去除c2字符
select rtrim(‘ababaa’ , ‘a’) from dual;
输出:abab

trim(c1):去除字符串c1中的空格;
ltrim(c1):去除字符串c1中左边的空格;
rtrim(c1):去除字符串c1中右边的空格;

(4)replace(char, s_string ,r_string):替换函数,r_string可以省略,表示用空格替换
select replace (‘abcde’, ‘a’, ‘A ‘) from dual;
输出:Abcde

select replace (‘abcde’, ‘ab’, ‘A’) from dual;
输出:Acde

select replace (‘abcde’, ‘a’) from dual;
输出:bcde

3、日期函数
select sysdate from dual; 获取系统日期
select add_months(sysdate, 3),add_months(sysdate,-3) from dual; 在当前日期上加/减3个月

next_day(date,char):如果char的值是‘星期一’,则返回date指定日期的下周一是哪天。

select next_day(sysdate, ‘星期一’) from dual;

last_day(date):返回日期data本月的最后一天
select last_day(sysdate) from dual;

months_between(date1,date2):计算两个日期之的月份差
select months_between(‘20-5月-17’ , ‘10-1月-17’) from dual;

extract(date from datetime)
select extract(year from sysdate) from dual;
select extract(month from sysdate) from dual;
select extract(day from sysdate) from dual;
select extract(hour from timetamp ‘2017-10-1 23:30:10’) from dual;

4、转换函数
(1)日期转换成字符
select to_char(sysdate, ‘YYYY-MM-DD HH24:MI:SS’) from dual;
select to_char (sysdate,’YYYY’), to_char(sysdate,’MM’), to_char(sysdate,’DD’) from dual;
2017 10 17

示例:查询雇员中2月份入职的雇员信息
select * from emp where to_char(hiredate,’MM’)=5;

(2)字符转换成日期
select to_date(‘2017-10-01’, ‘YYYY-MM-DD’) from dual;
to_date()函数按照系统默认的格式显示日期(01-10月 -17)

(3) 数字转换成字符
select to_char(12345.678, ’ 99,999.999)fromdual;12,345.678

select to_char(12345.678, ’ 99,999,999)fromdual;12,346

select to_char(12345.678, ’ S99,999,999’) from dual;
输出:+12,346

(4) 字符转换成数字
select to_number(‘1,000,9999’) from dual;
输出:1000

5、通用函数
(1) nvl()函数处理null函数
select null+1 from dual; #结果为空

select empno,ename,sal,comm,(sal+nvl(comm,0)) *12 from emp;#nvl(comm,0) 把null 变为0参与计算

(2) decode函数
select ename,job, decode(job,’CLERK’,’办事员’,’SALESMAN’,’销售’,’MANAGER’,’经理’,’—’) from emp;