字符函数
select empno,lower(ename),job,mgr,sal,comm from emp
数值函数
伪表:真实存在的为了验证数值运算临时存在的表,表名是固定的叫dual
select abs(-1),ceil(2.2),power(2,4),mod(10,3) from dual
日期函数
两个日期之间的月份数量
select months_between('07-7月-2020','01-5月-1990')from dual
增加月份后的日期
select add_months('24-5月-2020',1.5)from dual
离本时间最近的星期x的日期
select next_day('24-5月-2020','星期六')from dual
返回当月最后一天日期
select last_day('24-5月-2020')from dual
多行函数
单行函数和多行函数不能混用,多行函数只有一个值
单行函数是单行操作,多个结果,多行函数是多行比较,一个结果
select max(sal) from emp
select sum(comm)from emp
select avg(comm)from emp
select min(comm)from emp
select count(*)from emp--这样可以查到所有的数据数量
select count(*)from emp--查询字段值的数量
select count(distinct job)from emp--工作种类数量
转换函数
字符串和数字转换
select to_number('123')+2 from dual
select to_char(123) from dual
--9代表数字占位,例如999,999,999按照三个一组的形式输出
--L表示人民币符号 ¥表示美元
--如果以0表示占位符,0会进行补位,0的个数必须要打鱼前面数字的位数,否则报错
select to_char(123456789,'L999,999,999') from dual
以上to_number 和 to_char 之间的转换其实在Oracle里面是隐式自动转换,所以并不常用
日期和字符串转换
--指定转换格式
select to_date('2020-5-24','yyyy-mm-dd')from dual
--默认格式
select to_date('24-5月-2020')from dual
--默认格式
select to_char(hiredate)from emp
--指定转换格式
select to_char(hiredate,'yyyy"年"MM"月"dd"日"')from emp
select to_char(hiredate,'dd "日" MM "月" yyyy "年"')from emp
其他函数
nvl
问题导入:
select ename,sal+comm from emp
由于有的人comm是空的,导致整个之和都为空了,我们希望如果奖金为空,薪资应该等于工资
这里nvl的作用是如果comm的值为空,这个表达式的值就是0
select ename,sal+nvl(comm,0) from emp
nvl2
select ename,nvl2(comm,comm+sal,sal)from emp
如果comm为空,就检查comm+sal,如果这个也为空,就返回sal
decode
select ename,job,decode(job,'MANAGER','经理','PRESIDENT','董事长','SALESMAN','销售','普通员工')from emp
相当于一种if else规则的注释吧,前面都有条件,比如’MANAGER’,最后一个不需要条件,就是剩下的全部注释为最后一个