oracle对日期的操作详解,基本的操作全在这儿了

对日期的加法操作

 select sysdate,add_months(sysdate,12) from dual;        --加1年
 select sysdate,add_months(sysdate,1) from dual;        --加1月
 select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual;   --加1星期
 select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual;   --加1天
 select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1小时
 select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1分钟
 select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1秒

对日期的减法操作

 select sysdate,add_months(sysdate,-12) from dual;        --减1年
 select sysdate,add_months(sysdate,-1) from dual;        --减1月
 select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual;   --减1星期
 select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual;   --减1天
 select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual;  --减1小时
 select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --减1分钟
 select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --减1秒
相隔的天数,小时,分钟,秒数:
select extract(day from ts2 - ts1) day,
       extract(hour from ts2 - ts1) hour,
       extract(minute from ts2 - ts1) minute,
       extract(second from ts2 - ts1) second
  from (select to_timestamp('2011-10-18 15:29:02', 'yyyy-mm-dd hh24:mi:ss') ts1,
               to_timestamp('2012-12-26 17:22:05', 'yyyy-mm-dd hh24:mi:ss') ts2
          from dual);

--从date中截取year,month,day
select extract(year from sysdate) from dual;
select extract(month from sysdate) from dual;
select extract(day from sysdate) from dual;
或者
select to_char(sysdate,'yyyy') from dual;
select to_char(sysdate,'mm') from dual;
select to_char(sysdate,'dd') from dual;
select to_char(sysdate,'hh24') from dual;
select to_char(sysdate,'mi') from dual;

sql日期比较:

在今天之前:
select * from up_date where update < to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')
select * from up_date where update <= to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')
在今天之后:
select * from up_date where update > to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')
select * from up_date where update >= to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')
在某段时间内:
select * from up_date where update between to_date('2007-07-07 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')
select * from up_date where update < to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss') and update > to_date('2007-07-07 00:00:00','yyyy-mm-dd hh24:mi:ss')
select * from up_date where update <= to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss') and update >= to_date('2007-07-07 00:00:00','yyyy-mm-dd hh24:mi:ss')
返回日期d1所在月份最后一天的日期。
select sysdate,last_day(sysdate) hz from dual;
返回在日期d1基础上再加n1个月后新的日期。
selectsysdate,add_months(sysdate,3)  hz from dual;
返回日期d1所在月份最后一天的日期。
select sysdate,last_day(sysdate) hz from dual;
返回日期d1到日期d2之间的月数
select sysdate, months_between( sysdate, to_date('2006-01-01','YYYY-MM-DD')) months1,   months_between(sysdate,to_date('2016-01-01', 'YYYY-MM-DD')) months2 from dual; 
NEXT_DAY

【语法】: next_day(d1[,c1])

【功能】: 返回日期d1在下周,星期几(参数c1)的日期

【参数】: c1对应:1~7(1代表星期日),或者Monday/Mon~Sunday……,星期一,星期二……星期日

【例子】: select sysdate 当时日期, next_day(sysdate,2) 下周星期一, next_day(sysdate,’tuesday’) 下周星期二, next_day(sysdate,’wed’) 下周星期三, next_day(sysdate,’星期四’) 下周星期四, next_day(sysdate,6) 下周星期五, next_day(sysdate,7) 下周星期六, next_day(sysdate,1) 下周星期日 from dual;

TRUNC

【语法】: trunc(d1[,c1])

【功能】: 返回日期d1所在期间(参数c1)的第一天日期

【参数】: c1对应的参数表:
最近0点日期: 取消参数c1或j
最近的星期日:day或dy或d (每周顺序:日,一,二,三,四,五,六)
最近月初日期:month或mon或mm或rm
最近季日期:q
最近年初日期:syear或year或yyyy或yyy或yy或y(多个y表示精度)
最近世纪初日期:cc或scc
【例子】: select sysdate 当时日期,trunc(sysdate) 今天日期, trunc(sysdate,’day’) 本周星期日, trunc(sysdate,’month’) 本月初, trunc(sysdate,’q’) 本季初日期, trunc(sysdate,’year’) 本年初日期 from dual;

也可以:

trunc(sysdate,'yyyy') --返回当年第一天.
trunc(sysdate,'mm') --返回当月第一天.
trunc(sysdate,'d') --返回当前星期的第一天.
selecttrunc(sysdate,'YYYY')from dual;
selecttrunc(sysdate,'MM')from dual;
selecttrunc(sysdate,'D')from dual;
LAST_DAY

【语法】: last_day(d1)

【功能】: 返回日期d1所在月份最后一天的日期。

【参数】: d1,日期型

【例子】: select sysdate,last_day(sysdate) hz from dual;

有两个日期数据START_DATE,END_DATE,欲得到这两个日期的时间差(以天,小时,分钟,秒,毫秒):
天:
ROUND(TO_NUMBER(END_DATE - START_DATE))
小时:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24)
分钟:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60)
秒:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60)
毫秒:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60 * 60)
interval 用法
当前时间减去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 '7' hour from dual;
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值