Oracle 計算兩個日期之間的年月、日期,月份數、天數

目錄

Oracle 計算兩個日期之間的月份數、月份列表、天數、日期列表


Oracle 計算兩個日期之間的月份數、月份列表、天數、日期列表


  1. 獲取日期之間的月數(包括自身)

    1. 時間:2019-05-30 至 2019-08-01 

    2. select
             (MONTHS_BETWEEN ( TRUNC(TO_DATE('2018-08-01','YYYY-MM-DD'),'MONTH'), TRUNC(TO_DATE('2018-05-30','YYYY-MM-DD'),'MONTH') ) + 1) MONTH_COUNT
      from
             dual;
      *另一種易理解的方法:
      select
             (MONTHS_BETWEEN ( to_date(to_char(sysdate,'yyyy-MM'),'yyyy-MM'), to_date(to_char(to_date('2019-06-30','yyyy-MM-dd'),'yyyy-MM'),'yyyy-MM') ) + 1) MONTH_COUNT
      from
             dual;

       

    3. Result:
      MONTH_COUNT
      4
      

       

    4. 函數知悉:
      1. MONTHS_BETWEEN (date1, date2)
      2. TRUNC(SYSDATE,'MONTH')
        1. ROUND(d[,fmt]),返回一個以 fmt 爲格式的四捨五入日期值,d 是日期,fmt 是格式 模型。默認 fmt 爲 DDD,即月中的某一天。  如果 fmt 爲“YEAR”則舍入到某年的 1 月 1 日,即前半年捨去,後半年作爲下 一年。  如果 fmt 爲“MONTH”則舍入到某月的 1 日,即前月捨去,後半月作爲下一 月。  默認爲“DDD”,即月中的某一天,最靠近的天,前半天捨去,後半天作爲第 二天。  如果 fmt 爲“DAY”則舍入到最近的周的週日,即上半周捨去,下半周作爲下 一週週日。 

           與 ROUND 對應的函數時 TRUNC(d[,fmt])對日期的操作,TRUNC 與 ROUND 非常相似,只 是不對日期進行舍入,直接截取到對應格式的第一天。

  2. 獲取日期之間的月份列表(包括自身)
    1. 時間:2019-08-01 至 2020-01-01
    2. SQL:
      select
             TO_CHAR(ADD_MONTHS(TO_DATE('2019-08-01','YYYY-MM-DD'),(ROWNUM - 1)), 'yyyy-mm') MOHTN_ID
      from
             dual CONNECT BY ROWNUM <= MONTHS_BETWEEN ( TRUNC(TO_DATE('2020-01-01','YYYY-MM-DD'),'MONTH'), TRUNC(TO_DATE('2019-08-01','YYYY-MM-DD'),'MONTH') ) + 1
      ;

       

    3. Result:
         	MOHTN_ID
      1	2019-08
      2	2019-09
      3	2019-10
      4	2019-11
      5	2019-12
      6	2020-01
      

       

    4. 函數知悉:

      1. ADD_MONTHS(d,n),在某一個日期 d 上,加上指定的月數 n,返回計算後的新日期。 d 表示日期,n 表示要加的月數。 

      2. CONNECT BY:connect by 用於存在父子,祖孫,上下級等層級關係的數據表進行層級查詢。

  3. 獲取日期之間的天數、日期列表(包含自身)
         時間:2018-01-28 至 2018-02-04

    1. SQL:

      SELECT
             TO_CHAR(TO_DATE('2018-01-28', 'YYYY-MM-DD') + ROWNUM - 1, 'YYYY-MM-DD') DAY_ID
      FROM
             DUAL CONNECT BY ROWNUM <= TO_DATE('2018-02-04', 'YYYY-MM-DD') - TO_DATE('2018-01-28', 'YYYY-MM-DD') + 1;

       

    2. Result:

         	DAY_ID
      1	2018-01-28
      2	2018-01-29
      3	2018-01-30
      4	2018-01-31
      5	2018-02-01
      6	2018-02-02
      7	2018-02-03
      8	2018-02-04
      
    3. 知悉:

      1. TO_DATE(data1) - TO_DATE(date2) :天數

         


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章