函数一般是在数据上执行的,它给数据的转换和处理提供了方便。只是将取出的数据进行处理,不会改变数据库中的值。函数根据处理的数据分为单行函数和聚合函数(组函数),组函数又被称作聚合函数,用于对多行数据进行操作,并返回一个单一的结果,组函数仅可用于选择列表或查询的having子句;单行函数对单个数值进行操作,并返回一个值。
dual是一个系统表。注意用于测试。
1 字符相关
-- 1.字符串连接
select concat('aa','12') from dual;
select 'aa'||'12' from dual;
-- 2.首字母大写
select initcap('abc') from dual;
--- 把大写转化小写
select lower('ABc') from dual;
select upper('abc') from dual;
-- 把所有员工的姓名小写输出
select lower(e.ename),e.empno
from emp e
-- 3.填充字符lpad/rpad
select lpad('sxt',5,'*') from dual;
select rpad('sxt',5,'*') from dual;
-- 4.去掉空白字符
select ' kallen' from dual;
select ltrim(' kallen',' ') from dual;
select rtrim(' kallen ',' ') from dual;
-- trim 删除左右两边的字符
select trim('a' from 'abc') from dual;
-- 5.求子串 substr(str,loc,len)-->loc从1开始
select substr('abcd',2,2) from dual;
-- 6.查找字符串
/*
如果找到返回>=1的索引;如果没找到返回0
*/
select instr('abcd','b') from dual;
-- 7.求长度
select length('abcd') from dual;
2 数值型函数
-- 四舍五入round(x,y)对x保留y为小数
select round(23.652) from dual;
select round(23.652,1) from dual;
select round(25.652,-1) from dual;
-- 返回x按精度y截取后的值
select trunc(23.652) from dual;
select trunc(23.652,2) from dual;
select trunc(23.652,-1) from dual;
-- mod(x,y)求余数
select mod(9,2) from dual;
-- ceil 向上取整
select ceil(1.9) from dual;
-- floor 向下取整
select floor(1.9) from dual;
3 日期时间函数
-- 返回系统当前时间
select sysdate from dual;
-- 返回当前会话时区中的当前日期
select current_date from dual;
-- 添加月数
select add_months(sysdate,1) from dual;
-- 返回两个时间相差的月数
select months_between(sysdate,add_months(sysdate,2)) from dual;
-- 需求:查询工作年限在30年以上
select e.ename,e.hiredate
from emp e
where months_between(sysdate,e.hiredate)/12 > 30
-- 返回date下一月份的最后一天
select last_day(add_months(sysdate,1)) from dual;
-- next_day(date1,week) 返回date1下周星期几的日期
select sysdate "当时日期",next_day(sysdate,'Monday') "下周星期一