在oracle数据库中,函数大致可以分为三类:单行函数,分组函数和分析函数。
(1)单行函数:日期函数,字符函数,数字函数,转换函数
日期函数
select add_months(sysdate,15) from dual;
syadate() 获得系统当前日期
current_timestamp() 获得系统当前日期和时间
months_between(日期一,日期二) 返回两个日期间隔了几个月
greatest(, , ,,) 从日期列表参数中选出最早的日期
last_day(日期) 返回日期所在月的最后一天
next_day(日期,星期几) 返回日期所在这周的下周的参数星期几对应的日期
字符函数
select initcap('hello') from dual;将首字母大写:
select lower(ename) from emp; 将大写转成小写:
upper('') 将小写转成大写
Ltrim('abc123','abc') 如果参数二中任意一个字符出现在参数一的左边就去掉
Rtrim('abc123','123')如果参数二中任意一个字符出现在参数一的右边,就去掉
Translate('abca','a','b');如果参数二在参数一中出现,就用参数三代替
replace('','','')如果参数二在参数一中出现,就用参数三代替
instr('abcd','c') 获得参数二在参数一种出现的位置
substr('abcdef',3,2);从第3个字符开始,截取2个字符
Concat('abc','def') 连接两个字符串
CHR(97) 获得数字对应的字符
ASCII('A') 获得字符对应ASCII码
Lpad('abc',10,'*')如果abc不够10位,就在abc的左边加上*
Rpad('abc',10,'*')如果abc不够10位,就在abc的右边加上*
length('') 获得字符串的长度
trim('abcabc','a') 去掉参数一左右两边出现的参数二
nvl(参数一,参数二) 返回参数一的值,如果参数一为空,就返回参数二的值
nvl2(参数一,参数二,参数三) 如果参数一不为空,就返回参数二的值,否则就返回参数三的值
nullif(参数一,参数二) 如果参数一和参数二值相同,就返回null,否则返回参数一的值;
数字函数
abs() 求绝对值
ceil() 返回不小于或等于参数的最小整数
floor() 返回不大于或等于参数的最大整数
round() 四舍五入
trunc(,) 参数二指定参数一保留几位小数,如果参数二为0,则参数一的返回结果和floor一样;
转换函数
to_char(date,'YYYY-MM-DD')将参数一转换成 varchar2 格式
to_date('2015-10-12','YYYY-MM-DD');按照参数二指定的格式,将参数一字符串转换成日期数据
to_number(,)将数字字符串转换成数字数据
(2)分组函数
avg() 返回平均值
sum() 返回总和
max() 返回最大值
min() 返回最小值
count() 返回记录的统计数量
media()返回参数的中间值
variance() 返回方差
siddev() 返回标准差
(3)分析函数
Row_number:得到连续的数字
Rank :相同的值排位相同,随后跳跃
Dense_Rank:相同的值排位相同,随后接着往后排
select empno,ename,sal, row_number() over(order by sal desc) from emp;
select empno,ename,sal, rank() over(order by sal desc) from emp;
select empno,ename,sal, dense_rank() over(order by sal desc) from emp;
(1)单行函数:日期函数,字符函数,数字函数,转换函数
日期函数
select add_months(sysdate,15) from dual;
syadate() 获得系统当前日期
current_timestamp() 获得系统当前日期和时间
months_between(日期一,日期二) 返回两个日期间隔了几个月
greatest(, , ,,) 从日期列表参数中选出最早的日期
last_day(日期) 返回日期所在月的最后一天
next_day(日期,星期几) 返回日期所在这周的下周的参数星期几对应的日期
字符函数
select initcap('hello') from dual;将首字母大写:
select lower(ename) from emp; 将大写转成小写:
upper('') 将小写转成大写
Ltrim('abc123','abc') 如果参数二中任意一个字符出现在参数一的左边就去掉
Rtrim('abc123','123')如果参数二中任意一个字符出现在参数一的右边,就去掉
Translate('abca','a','b');如果参数二在参数一中出现,就用参数三代替
replace('','','')如果参数二在参数一中出现,就用参数三代替
instr('abcd','c') 获得参数二在参数一种出现的位置
substr('abcdef',3,2);从第3个字符开始,截取2个字符
Concat('abc','def') 连接两个字符串
CHR(97) 获得数字对应的字符
ASCII('A') 获得字符对应ASCII码
Lpad('abc',10,'*')如果abc不够10位,就在abc的左边加上*
Rpad('abc',10,'*')如果abc不够10位,就在abc的右边加上*
length('') 获得字符串的长度
trim('abcabc','a') 去掉参数一左右两边出现的参数二
nvl(参数一,参数二) 返回参数一的值,如果参数一为空,就返回参数二的值
nvl2(参数一,参数二,参数三) 如果参数一不为空,就返回参数二的值,否则就返回参数三的值
nullif(参数一,参数二) 如果参数一和参数二值相同,就返回null,否则返回参数一的值;
数字函数
abs() 求绝对值
ceil() 返回不小于或等于参数的最小整数
floor() 返回不大于或等于参数的最大整数
round() 四舍五入
trunc(,) 参数二指定参数一保留几位小数,如果参数二为0,则参数一的返回结果和floor一样;
转换函数
to_char(date,'YYYY-MM-DD')将参数一转换成 varchar2 格式
to_date('2015-10-12','YYYY-MM-DD');按照参数二指定的格式,将参数一字符串转换成日期数据
to_number(,)将数字字符串转换成数字数据
(2)分组函数
avg() 返回平均值
sum() 返回总和
max() 返回最大值
min() 返回最小值
count() 返回记录的统计数量
media()返回参数的中间值
variance() 返回方差
siddev() 返回标准差
(3)分析函数
Row_number:得到连续的数字
Rank :相同的值排位相同,随后跳跃
Dense_Rank:相同的值排位相同,随后接着往后排
select empno,ename,sal, row_number() over(order by sal desc) from emp;
select empno,ename,sal, rank() over(order by sal desc) from emp;
select empno,ename,sal, dense_rank() over(order by sal desc) from emp;