• 深入理解Oracle中的日期和时间戳
  • Alice 发表于 2015/9/18 12:55:00 | 分类标签: oracle日期函数 时间戳
  • 关于Oracle中的日期函数,很多人一开始都不明白时间戳和日期是不同的,日期中包括年月日但不包括小时分钟秒,时间戳包括年月日小时分钟秒。在oracle中,一般情况下,函数中包含date字符的和日期有关,包含timestamp的函数和时间戳有关(时间戳可以理解为时间)。oracle中,日期一般以天为基本单位,时间相减时结果单位为天,时间与数字相加时,默认加对应数字的天数。

    一、调用时无参无括号时间函数

    1.返回系统当前日期sysdate --该函数返回值没有时间戳

    select sysdate from dual;
    2.返回会话中的日期和时间localtimestamp--不包括时区

    select localtimestamp from dual;
    3.返回会话时区中的当前日期和时间current_timestamp--包括时区

    select current_timestamp from dual;
    4.返回当前会话时区中的当前日期current_date

    select current_date from dual;
    5.返回数据库时区设置dbtimezone

    select dbtimezone from dual;
    6.返回当前会话时区sessiontimezone

    select sessiontimezone from dual; 

    7.变动日期时间数值interval--设置数值代表秒,分,小时,天,月,年

    例如:

    HTML 预览

    1. interval '1' second    1秒  
    2. interval '1' minute    1分  
    3. interval '1' hour      1小时  
    4. interval '1' day       1天(系统默认)  
    5. interval '1' month     1月  
    6. interval '1' year        1年  
    7.   
    8. select trunc(sysdate)+(interval '1' second),--加1s  
    9.   trunc(sysdate)+(interval '1' hour),--加1个小时  
    10.   trunc(sysdate)+(interval '1' day),--加1天  
    11.   trunc(sysdate)+1--加1天  
    12.   from dual;  
     二、调用时有括号的日期函数

    1.返回指定月数后的日期add_months()

    select add_months(sysdate,3) from dual;
    等价于

    select trunc(sysdate)+interval '3' month from dual;

    2.返回本月最后一天的日期last_day()

    select last_day(sysdate) from dual;
    返回本月第一天

    select trunc(sysdate,'month') from dual;

    3.返回2个日期间隔月数month_between()

    select months_between(sysdate,to_date('2015-09-01','YYYY-MM-DD')) 
      from dual;
    4.四舍五入后的期间第一天round()

    HTML 预览

    1. select sysdate,  
    2.   round(sysdate),--最近0点日期  
    3.   round(sysdate,'day'),--最近星期日  
    4.   round(sysdate,'month'),--最近月初  
    5.   round(sysdate,'q'),--最近季出日期   
    6.   round(sysdate,'year')--最近年初日期  
    7.   from dual;  
    5.返回日期所在期间的第一天trunc()

    HTML 预览

    1. select trunc(sysdate),--今天日期  
    2.   trunc(sysdate,'day'),--本周星期日,等价于trunc(sysdate,'D')和trunc(sysdate,'d')  
    3.   trunc(sysdate,'month'),--本月初,若trunc(sysdate,'M')和trunc(sysdate,'m')则执行出错  
    4.   trunc(sysdate,'q'),--本季初日期  
    5.   trunc(sysdate,'year')--本年初日期,等价于trunc(sysdate,'Y')和trunc(sysdate,'y')  
    6.   from dual;  
    6.返回下周某一天的日期next_day(),可以返回下周的周一到周日

    HTML 预览

    1. select sysdate,  
    2.   next_day(sysdate,'星期一'),--返回下周星期一  
    3.   next_day(sysdate,'星期二')--返回下周星期二  
    4.   from dual;  
    7.提取时间日期中数据extract() --提取小时,分钟,秒时需要加上timestamp

    HTML 预览

    1. select   
    2.   extract(minute from timestamp '2015-2-16 2:38:40'),--timestamp时间戳  
    3.   extract(hour from timestamp '2015-2-16 2:38:40'),  
    4.   --extract(hour from timestamp(sysdate)),错误  
    5.   extract(hour from localtimestamp),--返回值错误  
    6.   extract(hour from current_timestamp),  
    7.   extract(day from sysdate),--日  
    8.   extract(month from sysdate),  
    9.   extract(year from sysdate)  
    10.   from dual;  
    总结:

    关于日期的函数还是挺多的,但是常用的一般为sysdate,localtimestramp,trunc,interval和extract,重点掌握这些应该足够了,其他不常用的可以用的时候再查找。
  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:Alice
  • 加入时间:2013/6/13 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮