注:本文中举的例子建立在Oracle提供的scott表和伪表dual的基础上
日期函数
--获取当前系统时间时间
select sysdate from dual
--三天前的时间 支持加减
select sysdate-3 from emp
--获取当月最后一天
select last_day(hiredate) from emp
--查看员工入职日期是在80 年12月这个月的员工信息
--NEXT_DAY(日期,星期数):求出下一个指定星期X的日期;(指的是下一次出现星期X的日期)select * from emp where last_day(hiredate)='31-12月-80'
select next_day (sysdate,'星期三') from dual
--求出四个月后的日
--求出两个日期之间所经历的月份select add_months(sysdate, 4) from dual
--求出每个雇员到今天为止的雇佣月份
select ename,hiredate, trunc(months_between(sysdate, hiredate)) from emp
注:两个日期相减操作的是 日 add_months() 操作的是 月 months_between() 操作的是 月
例:
--以年月日的方式显示所有员工的服务年限
select ename,trunc(months_between(sysdate,hiredate)/12) || '年'|| mod(trunc(months_between(sysdate, hiredate)),12) || '月' || trunc(sysdate-add_months(hiredate, trunc(months_between(sysdate, hiredate)))) ||'日' dddddd from emp
转换函数
· TO_CHAR(字符串 | 列,格式字符串):将日期或者是数字变为字符串显示;
select to_char(sysdate,'yyyy-mm-dd') from dual
(可以利用这个方法截取出年或者月或者日)--每个n为输出数字
select to_char(12345678,'99,99,99,99') from dual
· TO_DATE(字符串,格式字符串):将字符串变为DATE数据显示;
select to_char ( to_date('1999-1-1 20:20:22','yyyy-mm-dd hh24:mi:ss'),'yy-mm-dd hh12:mi:ss') from dual
· TO_NUMBER(字符串):将字符串变为数字显示;
select to_number('123')+123 from dual (246) select '123'+'123' from dual (246) select '123'||'123' from dual (123123)
通用函数
NVL()、DECODE()
NVL()函数,处理null
--NVL()函数,处理null (列名称,具体的值)
select sal+nvl(comm, 0) total ,ename from emp
--decode
--查询所有员工信息,显示员工的中文职位 CLERK = 办事人员 SALESMAN=销售人员 PRESIDENT=董事长
-- MANAGER=经理 ANALYST 分析师
--这样写很麻烦的 如果使用decode 就方便很多select ename, case when job ='CLERK' then '办事人员' when job ='SALESMAN' then '销售人员' when job ='PRESIDENT' then '董事长' when job ='MANAGER' then '经理' else '分析师' end jobs from emp
select ename , decode(job,'CLERK','办事人员','SALESMAN','销售人员', 'PRESIDENT','董事长','MANAGER','经理','ANALYST','分析师') from emp