官术网_书友最值得收藏!

5.3 日期函數

在默認情況下,日期數據的格式是DD-MON-YY。其中,DD表示兩位數字的日,MON表示3位數的月,YY表示兩位數字的年。在插入數據時,默認也采用DD-MON-YY格式插入數據。

5.3.1 日期函數概述

日期數據的格式由NLS_DATE_FORMAT系統參數來設置,該系統參數存儲在INIT.ORA和SPFILE.ORA文件中。可以使用SHOW PARAMETERS命令查看這些系統參數的值,另外還可以通過ALTER SYSTEM或ALTER SESSION命令修改該系統參數。ALTER SYSTEM命令表示修改系統參數的文件,這種修改設置在以后的數據庫操作中將一直起作用;在ALTER SESSION命令的設置只在當前的會話中起作用,該會話結束后,其設置就會失效。

在Oracle中,系統提供了許多用于處理日期和時間的函數,下表描述了常用的日期、時間函數的類型和功能。

5.3.2 計算日期

在Oracle系統中,DATE類似于NUMBER,也屬于一種數據類型,同樣擁有可以計算的功能。

1. 計算當前日期

Oracle中的SYSDATE()函數可以返回當前系統中的日期,例如下列代碼。

在使用SYSDATE函數返回當前日期時,需要注意該函數是根據行數來顯示當前日期值的,也就是說表中存在幾行數據便返回幾個日期值。

除了SYSDATE()函數之外,用戶還可以使用CURRENT_DATE()函數來顯示時區中的系統日期,以及使用SYSTIMESTAMP()函數來顯示數據類型格式的系統日期,其具體代碼如下。

2. 計算兩個日期之間的月數

在Oracle系統中,MONTHS_BETWEEN()函數可以返回兩個日期之間的月數,其結果值既可以是正數,也可以是負數。如果第一個參數指定的日期晚于第二個參數指定的日期,則結果值為負數,如下所示。

3. 計算指定月份的日期

用戶可以使用ADD_MONTHS()函數,在指定的日期中增減月份,以獲得間隔指定月后的日期。例如,下面的代碼中為指定的日期添加了6個月,其結果顯示6個月后的日期。

而下列代碼則將指定的日期減少了6個月,其結果顯示了6個月前的日期。

4. 顯示指定星期的日期

使用NEXT_DAY()函數,可以返回當前日期之后指定星期的具體日期,也就是說指定當前日期后的星期一至星期日的具體日期。

例如,已知具體日期,來指定具體日期后的第1個星期一的日期。首先,需要獲取已知日期,以便于對比計算結果。

      SQL> select dte from tb;

      DTE
      --------------
      15-9月 -17
      15-10月-17
      15-11月-17
      15-12月-17

然后,使用NEXT_DAY()函數計算已知日期后的星期一的具體日期。

      SQL> select next_day(dte,2) "Monday"
         2  from tb;

      Monday
      --------------
      18-9月 -17
      16-10月-17
      20-11月-17
      18-12月-17

5. 顯示每個月的最后一天

使用LAST_DAY()函數,可以返回每個月最后一天的日期。下面代碼中顯示了指定日期所在月的最后一天。

      SQL> select last_day(dte) "End Month"
         2  from tb;

      End Month
      --------------
      30-9月 -17
      31-10月-17
      30-11月-17
      31-12月-17
主站蜘蛛池模板: 凤翔县| 拜泉县| 凌云县| 武功县| 江孜县| 西和县| 鹤庆县| 福鼎市| 五莲县| 辉县市| 蕉岭县| 永吉县| 呼图壁县| 乌兰察布市| 方城县| 大丰市| 富顺县| 永泰县| 台北市| 于田县| 昌都县| 兰西县| 潮州市| 汽车| 涟水县| 加查县| 汤原县| 达拉特旗| 永兴县| 郓城县| 深州市| 巨野县| 靖江市| 江永县| 淮滨县| 资溪县| 徐水县| 湟源县| 罗平县| 泰和县| 沾化县|