Oracle之函数
一、数值函数
四舍五入
1
2
3
4
5
6
7SQL> ROUND(n[,m]);
--省略m或者m等于0:取整
--m>0:小数点后m位,保留m位小数
--m<0:小数点前m位,从m位进行四舍五入
SQL> select round(23.4),round(23.45,1),round(23.45,-1) from dual;
--23, 23.5, 23取整函数
1
2
3
4
5SQL> CEIL(n); --取最大值
FLOOR(n); --取最小值
SQL> select ceil(23.45),floor(23.45) from dual;
--24, 23取绝对值
1
SQL> ABS(n);
取余数
1
2MOD(m,n);
--m/n,如果 m和n中有一个值为null,则结果为nullm的n次幂
1
2SQL> POWER(m,n);
--m^n,m和n中有一个值为null,则结果为null平方根
1
SQL> SQRT(n);
三角函数
1
2
3SQL> SIN(n);ASIN(n); --正玄/反正玄
COS(n);ACOS(n); --余玄/反余玄
TAN(n);ATAN(n); --正切/反正切
二、字符函数
大小写转换函数
1
2
3
4
5
6SQL> UPPER(char); --小--大
LOWER(char); --大--小
INITCAP(char); --首字母大写
SQL> select upper('abcd'),lower('ASD'),initcap('asd') from dual;
--用途:注册用户名密码:不区分大小写,统一转换成大/小写存入数据库获取子字符串函数
1
2
3
4SQL> SUBSTR(char[,m[,n]]);
--char:源字符串
--m:取子串开始的位置,m为负数表示从尾开始
--n:截取的位数获取字符串长度函数
1
2
3SQL> LENGTH(char)
SQL> select length('abc ') from dual;--4字符串连接函数
1
SQL> CONCAT(char1,char2);--同||
去除子串函数
1
2
3
4
5
6--当只有一个参数时表示去除空格
SQL> TRIM(c2 from c1); --从c1中去除c2,只能去除一个字符
LTRIM(c1[,c2]); --从c1中去除c2,去除头部
RTRIM(c1[,c2]); --从c1中去除c2,去除尾部
SQL> select rtrim('abaa','a') from dual;--ab替换函数
1
2
3
4
5
6
7SQL> REPLACE(char,s_string[,r_string]);
--char:源字符串
--s_string:源字符串中被替换的字符串
--r_string:替换s_string的字符串,省略时表示空替换
SQL> select replace('abcde','a','A') from dual;--Abcde
select replace('abcde','a') from dual;--bcde
三、日期函数
系统时间
1
SQL> SYSDATE;--默认格式是DD-MON-RR 27-8月-17
日期操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17SQL> ADD_MONTHS(date,i);
--i为正在月份上加,i为负在月份上减
NEXT_DAY(date,char);
select next_day(sysdate,'星期一') from dual;
--返回下一个星期一是几号
LAST_DAY(date);
--用于返回日期所在月的最后一天是几号
MONTHS_BETWEEN(date1,date2);
--两日期之间间隔的月份
EXTRACT(date from datetime);
select extract(year from sysdate) from dual;--month/day
--返回所在的年/月/日
select extract(hour from timestamp '2017-8-27 17:35:28') from dual;
四、转换函数
日期转字符
1
2
3
4
5
6
7SQL> TO_CHAR(date[,fmt[,params]]);
--date:要转换的日期
--fmt:转换的格式YY MM DD HH24 HH12 MI SS
--params:日期的语言,英文的格式:YEAR MONTH DAY
--默认格式:DD-MON-RR
SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;字符转日期
1
2
3SQL> TO_DATE(char[,fmt[,params]]);
select to_date('2017-8-27','YYYY-MM-DD') from dual;
--注:to_date按照系统默认格式显示成日期,可再结合to_char转换数字转字符
1
2
3
4
5
6
7
8
9SQL> TO_CHAR(number[,fmt]);
--9:显示数字并忽略前面的0
--0:显示数字,位数不足用0补齐
--.或D:显示小数点
--,或G:显示千位符
--$:显示美元符号
--s:加正负号,前后都可以,不能同时加
SQL> select to_char(12345.678,'$99,999.999') from dual;--$12,345.678字符转数字
1
2SQL> TO_NUMBER(char[,fmt]);
select to_number('$1,000','$9999') from dual;--1000
五、oracle在查询中使用函数
使用字符函数
1
2
3
4
5--根据身份证号得到生日
SQL> select substr(cardid,7,8) from users;
--将部门号“01”替换成“信息技术”
SQL> select replace(deptno,'01','信息技术') from users;使用数值函数
1
SQL> select mod(age,10) from dual;
使用日期函数
1
2
3
4
5--取员工入职年份
SQL> select extract(year from regdate) from users;
--查询5月份入职的员工信息
SQL> select * from users where extract(month from regdate) = 5;