时间数据
1. 插入时间数据
- 插入语法
命令:insert into floor values (to_date('年-月-日 时:分:秒','YYYY-MM-DD HH24:MI:SS'));
- 完整的时间插入
insert into floor values (to_date('2010-07-12 09:10:12','YYYY-MM-DD HH24:MI:SS'));
查询显示:2010-07-12 09:10:12.0
- 缺少秒
insert into floor values (to_date('2010-07-12 09:10','YYYY-MM-DD HH24:MI'));
查询显示:2010-07-12 09:10:00.0
- 缺少分
insert into floor values (to_date('2010-07-12 09','YYYY-MM-DD HH24'));
查询显示:2010-07-12 09:00:00.0
- 当省略了HH、MI、SS 对应的参数时,oracle会使用0作为其默认值。即取整到当前日。
insert into floor values (to_date('2010-07-12','YYYY-MM-DD'));
查询显示:2010-07-12 00:00:00.0
- 如果输入的时间忽略 日DD ,oracle会 01 作为日的默认值,即取整到月。
insert into floor values (to_date('2010-07','YYYY-MM'));
显示时间:2010-07-01 00:00:00.0
- 如果输入的时间忽略 月MM,oracle不会取整到年,而是取整到当前月。
insert into floor values (to_date('2010','YYYY'));
查询显示:2010-06-01 00:00:00.0
2、特殊时间处理
- 时间查询延迟
- 在系统的时间基础上延迟五秒
sysdate+(5/24/60/60);
- 在系统时间基础上延迟五分钟
sysdate+(5/24/60);
- 在系统的时间基础上延迟五小时
sysdate+5/24;
- 在系统时间基础上延迟五天
sysdate+5;
- 在系统时间基础上延迟五月
add_months(sysdate,-5);
- 在系统时间基础上延迟五年
add_months(sysdate,-5^12);
- 上月月末的时间
select last_day(add_months(sysdate,-1)) from tablename;
- 本月的最后一秒
select trunc(add_months(sysdate,1),'MM')-1/24/60/60 from dual;
- 本周星期一的日期
select trunc(sysdate,'day')+1 from dual;
- 年初,至今的天数
select ceil(sysdate-trunc(sysdate,'year')) from dual;
- 今天是今年的第几周
select to_char(sysdate,'fmww') from dual;
- 今天是本月的第几周
select to_char(sysdate,'ww')-to_char(trunc(sysdate,'MM'),'ww')+1 as 'weekOfMon' from dual;
- 当前月的天数
select to_char(last_day(sysdate,'dd'),days) from dual;
- 今年的天数
select * add_months(trunc(sysdate,'year'),12)-trunc(sysdate,'year') from dual;
- 下个星期一的日期
select next_day(sysdate,'monday') from dual;
- 判断当前时间是上午下午还是晚上
select case
when to_number(to_char(sysdate,'hh24')) between 6 and 11 then '上午';
when to_number(to_char(sysdate,'hh24')) between 11 and 17 then '下午';
when to_number(to_char(sysdate,'hh24')) (between 17 and 23) and (between 0 and 6) then '晚上';
end
from dual;