函数
1.dual表:
Oracle提供的最小的工作表,只有一行一列,具有某些特殊功用。
select * from dual ;
2.函数的作用
方便数据的统计;
处理查询结果
3.函数的分类
3.1数值函数
四舍五入
ROUND(n[,m])
--省略m,那么m的默认值为0
--m>0:小数点后m位
--m<0:小数点前m位
例如:
select round(10.64) , round(10.64 ,1) , round(10.64 ,-1) from dual ;--dual为目标表,专门提供的一行一列的表
取整函数
CEIL(n)--取最大值
FLOOR(n)--取最小值
例如:
select ceil(10.64) , floor(10.64) from dual ;
常用计算
abs(n) -- 取绝对值
mode(m,n) --求余数 ,m为被除数, n为除数, 相当于m%n
power(m,n) --幂函数, 求m的n次幂
sqrt(m) --平方根, 求m的平方根
sin(n) ,asin(n) --正弦, 反正弦 ,n是弧度, 不是角度
cos(n) , acos(n)
tan(n) ,atan(n)
3.2字符函数
--大小写转换函数
upper(char) ,lower(char)
initcap(char) --首字母大写函数
--获取子字符串的函数
substr(char, m, n) ;--m表示从什么位置开始截取, n可以省略 ,n省略表示截取到末尾
--获取字符串的长度
length(char)
--字符串的连接函数
concat(char1 , char2) ; --等同于char1||char2
--去除一个字符函数
trim(char1 from char2) --从char2中去除首个char1, char1是一个字符, char2是字符串
ltrim(char1, char2) ;--和trim一样 ,从左边去除第一个char1字符
rtrim(char1 , char2) ;--从右边开始去除
trim(char), ltrim(char) ,rtrim(char)--表示去除char中的空格
--例如:
select trim('a' from 'abcdab"') from dual ;
--替换函数
replace(char , s_string [,r_string]) --用r_string替换char中的s_string
3.3日期函数
--系统时间
sysdate --默认格式DD-MON--RR
--例如
select sysdate from dual ;
--日期操作:
add_months(date , n) --给date中添加n个月 , 如果n为负,则减去n个月
例如
select add_months(sysdate , 3) from dual ;
next_day(date , char) ;--char是星期几的字符串 ,返回下一个星期几的日期
--例如:
select next_day(sysdate , '星期一') from dual ; --下一个星期一的日期
last_day(date) --date中月份的最后一天的日期
--例如
select last_day(sysdate) from dual ; --当前月份的最后一天的日期
months_between(date1 ,date2)--两个日期之间间隔的月份
--例如:
select months_between(sysdate , add_months(sysdate , 3) ) from dual ;
extract( year[|day|month] from date) --获取日期中的一部分
--例如
select extract(year from sysdate) from dual ;
3.4转换函数
- 日期类型转换成字符型
to_char(date[,fmt[,params]]):date表示要转换的日期,fmt表示转换的格式,params表示日期的语言(一般不写)
fmt的取值:年[YY/YYYY/YEAR],月[MM/MONTH],日[DD/DAY],时[HH12/HH24],分[MI],秒[SS]
--例如:
select to_char(sysdate , 'YYYY-MM-DD HH24:MI:SS') from dual ;
- 字符类型转日期类型
to_date(str[,fmt[,params]]):str表示日期格式的字符串,fmt表示转换的格式,params表示日期的语言(一般不写),该函数会按照系统默认的格式显示
fmt的取值:年[YY/YYYY/YEAR],月[MM/MONTH],日[DD/DAY],时[HH12/HH24],分[MI],秒[SS]
--例如
select to_date('2017-8-8' , 'YYYY-MM-DD') from dual ;
- 数字转字符
to_char(number[,fmt]):number表示要转换的数字,fmt表示转换的格式
fmt的取值:
[9]表示显示数字并忽略前面的0,
[0]表示显示数字,位数不足,用0补齐,
[.或D]表示显示小数点,
[,或G]表示显示千位符,
[$]表示美元符,
[S]表示加正负号(前后都可以)
--例如:
select to_char(02345.678 ,'999,99.999') from dual ;
- 字符转数字
to_number(str[,fmt]):str表示数字格式的字符串,fmt表示转换的格式,可以省略
例如:
select to_number('$023,45.678' ,'$999,99.999') from dual ;
4总结
数值函数:
四舍五入:round(n,m)
取整:floor(n)
绝对值:abs(n)
取余数:mod(m,n)
平方根:sqrt(n)
三角函数:sin(n)、asin(n)等字符函数:
大小写转换函数:upper(char)、lower(char)
字符串连接:concat(char1,char2)
获取子字符串:substr(char,m,n)
获取字符串长度:length(char)日期函数:
获取当前时间:sysdate
添加一定的月份:add_months(date,i)
查询当月最后一天:last_day(date)
两个日期月份的差:month_between(date1,date2)
提取制定日期部分:extract(date from datetime)转换函数
to_char(date,fmt,params)
to_date(char, fmt)
to_char(number,fmt)
to_number(char,fmt)