oracle日期函数及相关查询日期所用的函数

1、查询本周一和本周日  

select to_date(next_day(sysdate-7,2)) 周一, to_date(next_day(sysdate,1)) 周日 from dual;

2、查询  去年的今天 

SELECT  ADD_MONTHS(to_date(&mytime,'yyyymmdd'), -12) AS "当前时间减一年" FROM dual;

3、相关日期函数

--months_between(date1,date2) 返回date1和date2 之间 间隔多少个月
select months_between(sysdate, to_date('20140202','yyyymmdd')) from dual  --1.31695191158901


--add_months(date,number)  指定的日期上增加number 个月
select  add_months(sysdate,1) from  dual   --2014-4-11 19:42:33

--last_day(date)   返回日期date 所在月的最后一天
  select last_day(sysdate) from dual  --2014-3-31 19:44:31

-- next_day(day,'day')  下一个星期一  日  
select sysdate  from  dual  --当前日期  2014-3-11 19:28:05

select to_char(current_timestamp,'yyyymmdd hh24:mi:ss') from dual   -- 11-3月 -14 07.28.32.150101 下午 +08:00
 
select next_day(sysdate,'星期二') from  dual  --2014-3-18 19:27:16   今天就是星期二

select next_day(sysdate,'星期日') from  dual-- 2014-3-16 19:27:37


--extract(c1 from d1)  从日期d1中抽取c1指定的年月日时分秒。
select extract(year from date'2011-05-17') year from dual;    --2011
 
select extract(month from date'2011-05-17') month from dual;    --5
  
select extract(day from date'2011-05-17') day from dual;    --17
   


-- 获取两个日期之间的具体时间间隔,extract函数是最好的选择   

  -- 时间间隔的情况下 只能 算到天  无法再 加到月上。
select  
       extract(day from dt2-dt1) day   
      ,extract(hour from dt2-dt1) hour   
      ,extract(minute from dt2-dt1) minute   
      ,extract(second from dt2-dt1) second   
from (   
     select to_timestamp('2011-02-04 15:07:00','yyyy-mm-dd hh24:mi:ss') dt1   
           ,to_timestamp('2011-05-17 19:08:46','yyyy-mm-dd hh24:mi:ss') dt2   
     from dual)    
     

select extract(year from systimestamp) year   
      ,extract(month from systimestamp) month   
      ,extract(day from systimestamp) day   
      ,extract(minute from systimestamp) minute   
      ,extract(second from systimestamp) second   
      ,extract(timezone_hour from systimestamp) th   
      ,extract(timezone_minute from systimestamp) tm   
      ,extract(timezone_region from systimestamp) tr   
      ,extract(timezone_abbr from systimestamp) ta   
from dual    





http://oracle.chinaitlab.com/induction/817947.html

加法

  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秒

  Oracle关于时间/日期的操作

  1.日期时间间隔操作

  当前时间减去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

  2.日期到字符操作

  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

  参考oracle的相关关文档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)

  3. 字符到日期操作

  select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual

  具体用法和上面的to_char差不多。

  4. trunk/ ROUND函数的使用

  select trunc(sysdate ,'YEAR') from dual

  select trunc(sysdate ) from dual

  select to_char(trunc(sysdate ,'YYYY'),'YYYY') from dual

  5.oracle有毫秒级的数据类型

  --返回当前时间 年月日小时分秒毫秒

  select to_char(current_timestamp(5),'DD-MON-YYYY HH24:MI:SSxFF') from dual;

  --返回当前 时间的秒毫秒,可以指定秒后面的精度(最大=9)

  select to_char(current_timestamp(9),'MI:SSxFF') from dual;

  6.计算程序运行的时间(ms)

  declare

  type rc is ref cursor;

  l_rc rc;

  l_dummy all_objects.object_name%type;

  l_start number default dbms_utility.get_time;

  begin

  for I in 1 .. 1000

  loop

  open l_rc for

  'select object_name from all_objects '||

  'where object_id = ' || i;

  fetch l_rc into l_dummy;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值