Oracle常用函数
Oracle常用函数介绍
`Oracle常用函数有:转换函数、聚合函数、数字函数、日期函数、字符串函数、逻辑函数、分析函数、排名函数、偏移函数
例如:
一、三种转换函数TO_CHAR()、TO_DATE()、TO_NUMBER()
1.TO_CHAR(目标字段,’输出格式‘)
把日期转换成指定格式字符串。
1.select to_char(sysdate,'YYYY"年"MM"月"DD"日"') as TEST from dual; --2023年8月25日
2.select to_char(sysdate,'YYYY-MM-DD') as test from dual; --2023-08-25
3.select to_char(sysdate,'YYYY-MM') as test from dual; --2023-08
4.select to_char(sysdate,'YYYY') as yaer from dual; --2023
5.select to_char(sysdate,'MM') as MONTH from dual; --08
6.select to_char(sysdate,'DD') as Day from dual; --25
7.select to_char(sysdate,'SS') as Miao from dual; --15
8.select 123456.78,to_char(123456.78) as string from dual;
2.TO_DATE(目标对象,’输出格式’)
此处对象只能是符合实际日期的一个字符串类型;日期和数字型不能直接转换。
1.select to_date('20230809145345','YYYYMMDD HH24:MI:SS') as TIST_TIME from dual;
2.select to_date(20230809145345,'YYYYMMDD HH24:MI:SS') as TIST_TIME from dual; --隐式转换了,要避免隐式转换
3.select to_date('145345','HH24:MI:SS') as TIME from dual; --默认补全为当前月份第一天日期
4.select to_date('20230809','YYYYMMDD') as TIST_TIME from dual; --转换后日期带/
5.select to_date('20230809','YYYY-MM-DD') as TIST_TIME from dual; --转换后日期带/
3.TO_NUMBER(字符串)
把字符串转换成数字。
select '1234.56',to_number('1234.56') as numb from dual;
二、聚合函数 MAX()、MIN()、SUM()、AVG()、COUNT()
聚合函数:同时对多行进行操作,并返回一个结果 (别名 多行函数)。
聚合函数 结合 GROUP BY 一起使用。使用 GROUP BY 以后 ,聚合函数会根据分组字段,每个组返回一个计算结果。
使用了group by进行分组之后:
1、select后面(要查询的字段/列)只能接这个分组的字段和聚合函数,不能跟未分组的字段一起查询
2、分组后的过滤条件(HAVING),只能用分组字段(GROUP BY后面接的字段)或聚合函数过滤;HAVING 是对分组的结果进行过滤,放在 GROUP BY 后面。
数据说明:
empno代表员工编号,ename代表员工姓名,job代表工作岗位,mgr表示员工上级编号,hiredate表示员工入职日期,sal表示员工工资,comm表示员工奖金,deptno表示部门编号。
WHERE 和 HAVING 用法上的区别:
1、WHERE 必须放在 GROUP BY 前面,HAVING 放在 GROUP BY 后面过滤。
(WHERE是先过滤再分组,HAVING是先分组然后再过滤)
2、WHERE 后面可以跟所有的条件,除了 不能 直接使用 聚合函数 作为条件。
SELECT * FROM EMP E WHERE MAX(E.SAL)>1; --报错
3、HAVING 可以 直接使用聚合函数作为条件 , 只能跟 聚合函数 或 分组字段 作为条件。
1.MAX() 取最大值
select max(sal) from emp; --查找员工表中工资的最大值 5000
select deptno,max(sal) from emp group by deptno; --按照部门编号进行分组,找出每个部门中对应的员工工资的最大值。
2.MIN() 取最大值
select min(sal) from emp; --查找员工表中工资的最小值 800
select deptno,min(sal) from emp group by deptno; --按照部门编号进行分组,找出每个部门中对应的员工工资的最小值。
3.SUM() 取最大值
select sum(sal) from emp; --求所有员工工资的总和 29025
select deptno,sum(sal) from emp group by deptno; --按照部门编号进行分组,统计每个部门里面员工的工资总和。
4.AVG() 取最大值
select round(avg(sal),2) from emp; --求所有员工工资的平均值 2073.21
select deptno,round(avg(sal),2) from emp group by deptno; --按照部门编号进行分组,统计每个部门里面员工的工资的平均值。
注:round( x ,y )函数为四舍五入函数,指对数据 x 进行四舍五入,保留 y 位小数。
5.COUNT() 取最大值
select count(empno) from emp; --求员工表中的员工数 14
select deptno,count(empno) from emp group by deptno; --按照部门编号进行分组,统计每个部门里面员工的人数。
三、数字函数 ABS()、MOD()、POWER()、TRUNC()、ROUND()、CEIL()、FLOOR()
1.ABS() 取绝对值
SELECT ABS(-1) FROM DUAL; -- 1
SELECT ABS(-1.544) FROM DUAL; -- 1.544
SELECT ABS(0) FROM DUAL; -- 0
2.MOD() 数值求余
SELECT MOD(8,2) FROM DUAL; -- 0
SELECT MOD(8,3) FROM DUAL; -- 2
SELECT MOD(8,3.2) FROM DUAL; -- 1.6
3.POWER() 数值幂运算
SELECT POWER(2,3) FROM DUAL; --2的3次方 8
SELECT POWER(2,3.4) FROM DUAL; -- 10.556
SELECT POWER(-