Oracle数据库对日期时间操作

Oracle 时间处理

  1. 常用日期时间操作
-- 当前时间减去7秒的时间 
select sysdate,sysdate - interval '7' SECOND from dual;
-- 当前时间减去7分钟的时间
select sysdate,sysdate - interval '7' MINUTE from dual
-- 当前时间减去7小时的时间 
select sysdate - interval '7' hour from dual
-- 当前时间减去7天的时间 
select sysdate - interval '7' day from dual
-- 当前时间减去7月的时间 
select sysdate,sysdate - interval '7' month from dual
-- 当前时间减去7年的时间 
select sysdate,sysdate - interval '7' year from dual
-- 时间间隔乘以一个数字 
select sysdate,sysdate - 8 *interval '2' hour from dual
-- 当天0点时间
select trunc(sysdate) from dual;
-- 下个星期一的日期
SELECT Next_day(SYSDATE,'monday') FROM dual
  1. 日期到字符操作
select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
select sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual
select sysdate,to_char(sysdate,'yyyy-ddd hh:mi:ss') from dual
select sysdate,to_char(sysdate,'yyyy-mm iw-d hh:mi:ss') from dual
  1. 字符到日期操作(具体用法和上面的to_char差不多)
select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual
  1. trunk/ ROUND函数的使用
select trunc(sysdate ,'YEAR') from dual
select trunc(sysdate ) from dual
select to_char(trunc(sysdate ,'YYYY'),'YYYY') from dual

5.其他

1〉获得若干分钟前的时间 
select sysdate,sysdate - N/(60*24) from dual;
或者 
select sysdate,sysdate - interval 'N' minute from dual

2〉获得若干分钟后的时间 s
select sysdate,sysdate + N/(60*24) from dual;
或者 
select sysdate,sysdate + interval 'N' minute from dual

注释:"N"表示需要减去或者加上的分钟数

3〉获得若干秒前的时间 s
select sysdate,sysdate - N*0.00001 from dual;
或者 
select sysdate,sysdate - N/(60*60*24) from dual;
或者 
select sysdate,sysdate - interval 'N' second from dual

4〉获得若干秒后的时间 
select sysdate,sysdate + N*0.00001 from dual;
或者 
select sysdate,sysdate - N/(60*60*24) from dual;
或者 
select sysdate,sysdate + interval 'N' second from dual

注释:"N"表示需要减去或者加上的秒数 
注释:N*0.00001 等价于 N/(60*60*24)

5〉获得若干小时前的时间 
select sysdate,sysdate - N*/24 from dual;
或者 
select sysdate,sysdate - interval 'N' hour from dual

6〉获得若干小时后的时间
select sysdate,sysdate + N*/24 from dual;
或者 
select sysdate,sysdate + interval 'N' hour from dual

注释:"N"表示需要减去或者加上的小时数

7〉获得若干月之后同一时间 
select sysdate,add_months(sysdate,N) from dual;
或者 
select sysdate,sysdate + interval 'N' month from dual

8〉获得若干月之前的同一时间 
select sysdate,add_months(sysdate,-N) from dual;
或者 
select sysdate,sysdate - interval 'N' month from dual
注释:"N"表示需要减去或者加上的月数

9〉获得某个日期所在月份的第一天 
select sysdate,trunc(sysdate,'mm') from dual;

10〉获得某个日期所在年的第一天 
select sysdate,trunc(sysdate,'yyyy') from dual;
或者 
select sysdate,to_date(to_char((to_number(to_char(sysdate,'yyyy')) * 100 + 1) * 100 + 1),'yyyymmdd') from dual

11〉获得某个日期所在年的最后一天 
select sysdate,to_date((to_char(sysdate,'yyyy') || '1231'),'yyyymmdd') from dual;
或者 
select sysdate,to_date(to_char((to_number(to_char(sysdate,'yyyy'))* 100 + 12) * 100 + 31),'yyyymmdd') from dual

12〉获得某个日期所在月份的最后一天 
select sysdate,last_day(sysdate) from dual;

13〉获得两个日期之间的时数 
select t.intime,t.outtime,trunc(24*(t.outtime-t.intime)) from hr_carding t

14〉获得两个日期之间的天数 
select t.begintime,t.endtime,trunc(t.endtime-t.begintime) from hr_absence t

15〉获得若干天前的时间 s
select sysdate,sysdate - N from dual;
或者 
select sysdate,sysdate - interval 'N' day from dual

16〉获得若干天后的时间 
select sysdate,sysdate + N from dual;
或者 
select sysdate,sysdate + interval 'N' day from dual

注释:"N"表示需要减去或者加上的天数

17〉获得若干年前的时间 
select sysdate,add_months(sysdate,-12*N) from dual;
或者 
select sysdate,sysdate - interval 'N' year from dual

16〉获得若干年后的时间 
select sysdate,add_months(sysdate,12*N) from dual;
或者 
select sysdate,sysdate + interval 'N' year from dual
注释:"N"表示需要减去或者加上的年数

17〉相隔若干小时的时间 
select sysdate,sysdate - M * interval 'N' hour from dual

18〉检索出某一个日期所在月份的所有天信息
select trunc(to_date('X', 'yyyymmdd'), 'mm')
  from dual
union all
select trunc(to_date('X', 'yyyymmdd'), 'mm') + rownum
  from dual
connect by rownum <= (last_day(to_date('X', 'yyyymmdd')) -
           trunc(to_date('X', 'yyyymmdd'), 'mm'))
或者
select first + rownum - 1 myday
  from (select trunc(to_date('X', 'yyyymmdd'), 'MM') first,
               trunc(last_day(to_date('X', 'yyyymmdd'))) last
          from dual)
connect by rownum <= last - first + 1
其中:字符串'X'表示某一个日期

19〉怎样知道今天是星期几
select to_char(sysdate,'day') from dual;
在获取之前可以设置日期语言,如:
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
还可以在函数中指定
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = AMERICAN') from dual; 
其它更多用法,可以参考to_char与to_date函数

20〉本月的天数
SELECT to_char(last_day(SYSDATE),'dd') days FROM dual

21〉今年的天数
select add_months(trunc(sysdate, 'year'), 12) - trunc(sysdate, 'year') /*下一年的第一天减去今年的第一天*/
from dual

22〉下个星期一的日期
SELECT Next_day(SYSDATE,'monday') FROM dual

23〉怎么样从数据库中获得毫秒 
9i以上版本,有一个timestamp类型获得毫秒,如

select to_char(systimestamp ,'yyyy-mm-dd hh24:mi:ssxff') time1, 
to_char(current_timestamp,'yyyy-mm-dd hh24:mi:ssxff') time2 
from dual;
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值