注:dual 是一个虚表,不能保存任何数据,只有一个字段,一行记录
单行函数 一条记录返回一个结果
select lower(ename) from emp;
select concat(ename,sal)from emp;
select substr('hello',2,2) from dual;
select length('hello')from dual;
select instr('string','r')from dual;
--结果为3
select lpad('hi',3,'hello') from dual;
--结果为 hhi
select trim('s' from 'sssis') from dual;
--结果为 i
select replace('strrring','r','a')from dual;
--结果为 staaaing
select round(203,-1)from dual;
--200
select trunc(223,-2) from dual;--200
select mod(223,2) from dual;
--1
DD-MON-RR 1998年12月20日即‘20-12月--98’
当前年份(0-49),则取这世纪的(0-49),上世纪的(50,99)
select sysdate from dual;
select (sysdate - hiredate)/365 年,(sysdate - hiredate) 天 from dual
select months_between(sysdate,hiredate) 月from emp;
select add_months(sysdate,1) from dual;
select next_day(sysdate,'星期五') from dual;
select last_day(sysdate) from dual;
select round(sysdate,'month') from dual;
select trunc(sysdate,'month') from dual;
select sysdate, extract (year from sysdate) from dual;
--2021
select to_char(hiredate,'day') from emp;
--显示的是星期几
select to_date('2020-10-10','yyyy-mm-dd') from dual;
select to_number('25') from dual;
--只有这样的才能转为数字
select ename,deptno,
(case deptno
when 10 then '销售部'
when 20 then '研发部'
when 30 then '管理部'
else '无' end
)
from emp;
select nvl(null,3) from dual;
--3
select coalesce(null,null,3) from dual;
--3
select max(sal) from emp;
select min(hiredate) from emp;
select avg(comm) from emp;--550
select avg(nvl(comm,0))from emp;--157
select sum(hiredate) from emp;
select count(empno) from emp;
写在where之后,order by之前
select 列表中所有普通字段(即没有聚合函数等的字段)都必须放在group by中
group by中出现的字段不一定出现在select中
处理多条数据返回一个结果 也可以将表分成多个组 可以将 整个表作为一组
select deptno,job
from emp
where deptno=10
group by deptno,job;
having只能在分组的基础上进行的过滤的是分组函数
select deptno,max(sal)
from emp
group by deptno
having max(sal)>500;
1.from 2.where 3.group by 4.having 5. select 6. orderby
注:函数之间可以相互嵌套