Oracle中的日期類型及其相關的函數

來源:互聯網
上載者:User

Oracle
中的日期類型及其相關的函數

Oracle
提供了很多的內建的日期類型,包括如下幾種:
Date
Timestamp
Timestamp With Time Zone
Timestamp With Local Time Zone
Interval Year To Month
Interval Day To Second

Date類型用於儲存日期,精確到秒,可能通過設定NLS_DATE_FORMAT或者TO_CHAR方法來格式化日期的輸出。

Timestamp用於存在日期與時間資訊,這個類型比Date更精確,最小能精確到小數點後9位。下面是一個例子:

scott@ORCL> select nowDate,nowTimestamp from testtime;

NOWDATE   NOWTIMESTAMP
--------- -------------------------------
24-NOV-08 24-NOV-08 10.36.59.000000000 PM

Timestamp With Time Zone類型與Timestamp非常相似,只是是按照指定時區進行顯示。

Timestamp With Local Time Zone  類型以上面的更加相似,這裡是按照當前時區顯示時間。
下面是一個例子:

scott@ORCL>select * from testtime;

NOWDATE   NOWTIMESTAMP                  TIMEWITHZONE            TIMEWITHLOCALZONE
--------- ----------------------------------- -----------------------------------
24-NOV-08 24-NOV-08 10.44.55.000000000 PM     24-NOV-08 10.44.55.000000 PM +08:00 24-NOV-08 10.44.55.000000 PM

可以使用ALTER SESSION SET來設定Timestamp的輸出,如:

scott@ORCL> ALTER SESSION SET NLS_DATE_FORMAT =
                          'YYYY-MM-DD HH24:MI:SS';
Session altered.
scott@ORCL> ALTER SESSION SET NLS_TIMESTAMP_FORMAT
                      = 'YYYY-MM-DD HH24:MI:SS.FF';
Session altered.
scott@ORCL> ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT
                     = 'YYYY-MM-DD HH24:MI:SS.FFTZH:TZM';
Session altered.

scott@ORCL>/

NOWDATE         NOWTIMESTAMP            TIMEWITHZONE                TIMEWITHLOCALZONE
------------------- ------------------------------ ----------------------------------- ------------------------
2008-11-24 22:44:55 2008-11-24 22:44:55.000000000   2008-11-24 22:44:55.000000+08:00    2008-11-24 22:44:55.000000

Interval Year[(precision)] To Month類型用來表示一段以年和月為單位時間,主要用來表達兩個時間之間的間隔,如1年又3個月。在year上面可以設定一個精確度,取值為0-9,預設的值為2。

Interval Day[(precision)] To Second 與上面的類型類似,主要用來表示以天,小時,分鐘,秒為單位的一段時間。在day上面可以設定一個精確度,取值為0-9,不設定時預設為6。
這兩個Interval類型可以進行加,減,乘,除運算。下面通過兩個例子來看看這兩種類型如何工作:
scott@ORCL>create table test_interval(ts1 timestamp(2),y2m interval year(4) to month,d2s interval day(4) to second);

Table created

scott@ORCL>insert into test_interval values(systimestamp,to_YMInterval('4-7'),to_DSInterval('5 02:20:30.30));

scott@ORCL> select * from test_interval;

TS1              Y2M         D2S
------------------------- ---------- ------------------------------
2008-11-24 23:06:10.71      +0004-07    +0005 02:20:30.300000

通過上面例子可以看到,to_YMInterval()和 to_DSInterval()方法能將一個字串轉換成Interval類型
下面這個例子展示一下這個類型的使用方法:

scott@ORCL>  select sysdate
,sysdate
+t.y2m,sysdate
+t.d2s from test_interval t;

SYSDATE
        SYSDATE
+T.Y2M    SYSDATE
+T.D2S
------------------- ------------------- -------------------
2008-11-24 23:25:02 2013-06-24 23:25:02 2008-11-29 01:45:32

從上面的查詢可以看到,sysdate
+t.y2m在當時時間上增加了4年又7個月,sysdate
+t.d2s在當時時間上增加了5天,2小時,20分,30秒。

下面看看Oracle
提供的與日期相關的函數
Trunc(date [,fmt])          這個函數用來截取日期,精度由fmt控制
To_Timestamp(var1,fmt)     將字串轉換成Timestamp類型
TO_DATE(var1,fmt)          將字串轉換成Date類型
Add_months(date,n)         增加n個月,為負數時是減少n個月
Last_day(date)             當月的最後一天,可通過與Add_months結合取得其它的月的最後一天
Month_between(date,date)   返回兩個時間的相關的月數
Next_day(date,dow)        dow表示星期幾,返回date的下一個dow的日期
Round(date [,fmt])         和資料的Round類似,fmt表示Round的精度,預設為天,如HH24,DD等
Extract(var from date)     從date中取出相應的年,月,日,小時,分鐘,秒等資訊 

下面是一些例子:
SQL> select sysdate
,add_months(sysdate
,+1) next_month,add_months(sysdate
,-1) pro_month from dual

SYSDATE
         NEXT_MONTH       PRO_MONTH
-------------------- -------------------- --------------------
25-Nov-2008 22:29:35 25-Dec-2008 22:29:35 25-Oct-2008 22:29:35

SQL>  select sysdate
,
  2  extract(year from sysdate
) year,
  3  extract(month from sysdate
) month,
  4  extract(day from sysdate
) day
  5* from dual

SYSDATE
           YEAR      MONTH      DAY
-------------------- ---------- ---------- ----------
25-Nov-2008 22:32:01       2008     11       25

 

SQL> select last_day(sysdate
) last_day from dual;

LAST_DAY
---------
30-NOV-08

SQL> select last_day(add_months(sysdate
,1)) next_last_day from dual

NEXT_LAST_DAY
--------------------
31-Dec-2008 22:46:25

 

SQL> select sysdate
,round(sysdate
,'HH24') from dual;

SYSDATE
         ROUND(SYSDATE
,'HH24'
-------------------- --------------------
25-Nov-2008 22:47:23 25-Nov-2008 23:00:00

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.