一、函数的作用
方便数据的统计
处理查询结果
二、函数的分类
数值函数
字符函数
日期函数
转换函数
三、数值函数
Ⅰ、四舍五入
round(n[,m])
省略m:0
m>0:小数点后m位
m<0:小数点前m位
如
select round(23.4),round(23.45,1),round(23.45,-1)from dual;
Ⅱ、取整函数
ceil(n) --取最大值
floor(n) --取最小值
select ceil(23.45),floor(23.45) from dual;
结果:
CEIL(23.45) FLOOR(23.45)
----------- ------------
24 23
Ⅲ、常用计算
abs(n) --取绝对值
如
select abs(23.45),abs(-23),abs(0) from dual;
======
mod(m,n) --取余数
如
select mod(5,2) from dual;
======
power(m,n) --取m的n次幂
如
select power(2,3),power(null,2) from dual;
======
sqrt(n) --求平方根
如
select sqrt(16) from dual;
======
Ⅳ、三角函数
sin(n),asin(n)
cos(n),acos(n)
tan(n),atan(n) --提供弧度参数
如
select sin(3.124) from dual;
四、字符函数
Ⅰ、大小写转换函数
upper(char) --转换为大写
lower(char) --转换为小写
initcap(char) --首字母大写
如
select upper('abde'),lower('ADe'),initcap('asd') from dual;
Ⅱ、获取子字符
substr(char,[m[,n]]) --获取子字符,分别是从哪取,从哪个位置开始取以及取出多少位,n省略时,从m的位置截取到结束,m从1开始如果m写0也是从第一个字符开始。如果m为负数时,从字符串的尾部开始截取
如
select substr('abcde',2,3),substr('abcde',2),substr('abcde',-2,1) from dual;
Ⅲ、获取字符串长度函数
length(char) --会包含空格的长度
如
select length('acd ') from dual;
Ⅳ、字符串连接函数
concat(char1,char2) --与||作用一样
如
select concat('ab','cd') from dual;
Ⅴ、去除子串函数
trim(c2 from c1) --代表从c1中去除c2字符串,就是子文本替换,要求c2中只能是一个字符
如
select trim ('a' from 'abcde') from dual;
======
ltrim(c1[,c2]) --从c1中去除c2,从左边开始去除,要求第一个就是要去除的字符,有多少个重复的该字符就会去除多少次
如
select ltrim('ababaa','a') from dual;
======
rtrim(c1[,c2]) --从c1中去除c2,要求右侧第一个就是要去除的字符,有多少个重复的该字符就会去除多少次
======
trim(c1) --代表去除首尾的空格,删首尾空,同理ltrim和rtrim只有一个参数时。
======
replace(char,s_string[,r_string]) --替换函数,省略第三个参数则用空白替换
如
select replace('abcde','a','A') from dual;
select replace('abcde','c') from dual;
select replace('abced','ab','A') from dual;
五、日期函数
Ⅰ、系统时间
sysdate 默认格式:DD-MON-RR 天-月-年
Ⅱ、日期操作
add_months(date,i) --用于添加指定的月份,返回在指定的日期上添加的月份,i可以是任意整数,如果i是负数,则是在原有的值上减去该月份了
如
select add_months(sysdate,3),add_months(sysdate,-3) from dual;
======
next_day(date,char) --第二个参数指定星期几,在中文环境下输入星期X即可,返回下一个周几是哪一天。
如
select next_day(sysdate,'星期一') from dual;
======
last_day(date) --用于返回日期所在月的最后一天
如
select last_day(sysdate) from dual;
======
month_between(date1,date2) --计算两个日期之间间隔的月份,前者减后者
如
select months_between('20-5月-15','10-1月-15') from dual;
======
extract(date from datetime) --返回相应的日期部分
如
select extract(year from sysdate) from dual; --可以改month或者day
select extract(hour from timestamp '2015-10-1 17:25:13') from dual;
======
用于截取日期时间的trunc函数
用法:trunc(字段名,精度)
具体实例:
在表table1中,有一个字段名为sysdate,该行id=123,日期显示:2016/10/28 15:11:58
1、截取时间到年时,sql语句如下:
select trunc(sysdate,'yyyy') from table1 where id=123; --yyyy也可用year替换
显示:2016/1/1
2、截取时间到月时,sql语句:
select trunc(sysdate,'mm') from table1 where id=123;
显示:2016/10/1
3、截取时间到日时,sql语句:
select trunc(sysdate,'dd') from table1 where id=123;
显示:2016/10/28
4、截取时间到小时时,sql语句:
select trunc(sysdate,'hh') from table1 where id=123;
显示:2016/10/28 15:00:00
5、截取时间到分钟时,sql语句:
select trunc(sysdate,'mi') from table1 where id=123;
显示:2016/10/28 15:11:00
6、截取时间到秒暂时不知道怎么操作
7、不可直接用trunc(sysdate,'yyyy-mm-dd'),会提示“精度说明符过多”
8.如果不填写第二个参数,则默认到DD,包含年月日,不包含时分秒。
六、转换函数
to_char(date[,fmt[,params]]) --date为需要转换的日期,fmt为转换的格式,params为转换的语言(通常默认会自动选择,可以省略,与安装语言一致)
默认格式:DD-MON-RR
可以定义的格式:
YY YYYY YEAR
MM MONTH
DD DAY
HH24 HH12
MI SS
如
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
======
to_date(char[,fmt[,params]])
如
select to_date('2015-05-22','yyyy-mm-dd') from dual; --注意显示的时候仍然按照时间的默认格式来显示
======
to_char(number[,fmt])
fmt列表:
9:显示数字并忽略前面的0
0:显示数字,位数不足,用0补齐
.或D:显示小数点
,或G:显示千分位
$:美元符号
S:加正负号(前后都可以)
如
select to_char(12345.678,'$99,999.999') from dual;
select to_char(12345.678,'s99,999.999') from dual;
======
to_number(char[,fmt])
fmt是转换的格式,可以省略
如
select to_number('$1,000','$9999') from dual;
七、一些课堂案例
Ⅰ、在查询中使用函数
如
在员工信息表中查询员工的生日
substr(char[,m[,n]])
将员工信息表中的年龄字段与10取余数
取员工入职的年份
查询出5月份入职的员工信息
===================================================================================