zoukankan      html  css  js  c++  java
  • oracle 日期函数

    上篇简单的介绍了一下add_months 函数,本篇博客再介绍下其它的几个日期函数。

    可以用下面语句来设置oracle日期的格式

    alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

    可以查询语句格式

    select * from nls_session_parameters where parameter = 'NLS_DATE_FORMAT';

    下面首先介绍sysdate 它获取的是服务器端的时间,

    sysdate-n  这里的n指的是天

    比如

    SQL> select sysdate-1 from dual;
     
    SYSDATE-1
    -----------
    2012-2-18 上

    这里sysdate-1 就是1天前的时间,如果要1小时以前的则用1/24 可以计算到查询任何时候的。

    MONTHS_BETWEEN(date1,date2)

    是查两个日期间相差的月数

    SQL> select MONTHS_BETWEEN(sysdate,to_date('2012-01-30','yyyy-mm-dd')) from dual;

     
    MONTHS_BETWEEN(SYSDATE,TO_DATE
    ------------------------------
                 0.658382243130227

    它是查询的两个时间的月数,可以用数表示的。它是第一个时间减去第二个时间

    如果 select MONTHS_BETWEEN(to_date('2012-01-30','yyyy-mm-dd'),sysdate) from dual; 时间反过来,查的则是负数的月。

    NEXT_DAY(date,6)

    下一周的时间,这里6,代表星期5,因为美国日期是从星期天开始的,所以1代表的是星期天,2代表星期一,以此类推。

    比如 我找下一个星期二是

    SQL> select next_day(sysdate,3) from dual;
     
    NEXT_DAY(SYSDATE,3)
    -------------------
    2012-2-21 上午 09:54:

    如果设置了日期格式,可以直接用时间串写

    SQL> select next_day('2012-2-19 8:23:12',3) from dual;
     
    NEXT_DAY('2012-2-198:23:12',3)
    ------------------------------
    2012-2-21 上午 08:23:12

    LAST_DAY  本月的最后一天

    SQL> select LAST_DAY(sysdate) from dual;
     
    LAST_DAY(SYSDATE)
    -----------------
    2012-2-29 上午 09:5

    它是找的本月的最后一天

    SQL> select LAST_DAY('2011-03-12 3:23:12') from dual;
     
    LAST_DAY('2011-03-123:23:12')
    -----------------------------
    2011-3-31 上午 03:23:12

    ⊙ ROUND(舍入) year,month,dd,day。
    ⊙ TRUNC(切除)

    在日期处理上处理四舍五入的原则分

    ◎ 一半以下(含一半)舍,如月份,1,2,3,4,5,6月舍弃 
    ◎ 一半以上入,如月份7,8,9,10,11,12入

    举例说明ROUND

    SQL> select round(sysdate,'year') from dual;
     
    ROUND(SYSDATE,'YEAR')
    ---------------------
    2012-1-1

    对年进行截取,因为是2月份,所以舍去

    SQL> select round(sysdate,'month') from dual;
     
    ROUND(SYSDATE,'MONTH')
    ----------------------
    2012-3-1

    这是对月进行截取,因为是19号,属于下半月,就进入下个月。

    SQL> select round(sysdate,'dd') from dual;
     
    ROUND(SYSDATE,'DD')
    -------------------
    2012-2-19

    dd表示对天进行舍入,现在是早点10点,属于上班段时间。

    day是对一周的时间进行舍入,不过它是从礼拜天开始的,比如今天是礼拜日,是第一天

    SQL> select round(sysdate,'day') from dual;
     
    ROUND(SYSDATE,'DAY')
    --------------------
    2012-2-19

    但是比如昨天是礼拜6,是最后一天,属于后半周。就会入到下周的第一天,也就是礼拜天。s

    SQL> select round(to_date('2012-02-18','yyyy-mm-dd'),'day') from dual;
     
    ROUND(TO_DATE('2012-02-18','YY
    ------------------------------
    2012-2-19

    再介绍一下TRUNC

    SQL> select trunc(to_date('2012-02-18','yyyy-mm-dd'),'day') from dual;
     
    TRUNC(TO_DATE('2012-02-18','YY
    ------------------------------
    2012-2-12

    2月18号是星期六,它就会截取到星期一,所以查出来的是2月12号

    年月日就不举例说明,

    再介绍两个oracle内置函数

    numtoyminterval(1,'month')  month 可以换成year,

    NUMTODSINTERVAL(1,'day') day,hour,minute,second

    这两个函数的意思是加上你所要的时间,前面一个数量,后面一个是单位。

    举个例子,比如说当前时间的2天以后,可以用下列语句

    SQL> select sysdate + NUMTODSINTERVAL(2,'day') from dual;
     
    SYSDATE+NUMTODSINTERVAL(2,'DAY
    ------------------------------
    2012-2-21 上午 10:33:13

    其它都是同样的。

    但是在numtoyminterval(1,'month')  这个和add_months 有点区别,比如今天事2月29号,这个月的最后一天,那么再加一个月是3月31号,还是2月29号呢,通过实验来说明

    SQL> select add_months(to_date('2012-2-29','yyyy-mm-dd'),1) from dual;
     
    ADD_MONTHS(TO_DATE('2012-2-29'
    ------------------------------
    2012-3-31

    add_months 是加一个月,这个月的月末到下个月的月末,我们再来看numtoyminterval

    SQL>  select to_date('2012-2-29','yyyy-mm-dd')+numtoyminterval(1,'month')  from dual;
     
    TO_DATE('2012-2-29','YYYY-MM-D
    ------------------------------
    2012-3-29

    它就加到了3月29,这就是它们两个的区别。

    今天写的只不过是简单的例子,希望大家多多指教,欢迎指出不足之处。

  • 相关阅读:
    vagrant up报错 Warning: Authentication failure. Retrying...解决方案
    node读写Excel操作
    批量转换word为pdf
    分享7个shell脚本实例--shell脚本练习必备
    shell脚本实例,通向shell脚本大师的必经之路
    前端优化DNS预解析
    如何选择开源协议
    深入理解document.referrer的用法
    使用 WebRTC 构建简单的前端视频通讯
    深入理解WebRTC
  • 原文地址:https://www.cnblogs.com/wujin/p/2357979.html
Copyright © 2011-2022 走看看