oracle數據類型之DATETIME

Datetime and Interval


        在007題庫中有一道關於DATETIME數據類型的題目:
        Which three are DATETIME data types that can be used when specifying column definitions? (Choose three)

        A.  TIMESTAMP
        B.  INTERVAL MONTH TO DAY
        C.  INTERVAL DAY TO SECOND
        D.  INTERVAL YEAR TO MONTH
        E.  TIMESTAMP WITH DATABASE TIMEZONE

這道題,因爲要選三個答案,因此應該就是A, C, D。 不過在Oracle9i Reference中,好像並沒有把INTERVAL歸到datetime datatypes 裏面, 原文是如此描述的:
        The datetime datatypes are DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE and TIMESTAMP WITH LOCAL TIME ZONE. Values of datetime datatypes are sometimes called "datetimes". The interval datatypes are INTERVAL YEAR TO MONTH and INTERVAL DAY TO SECOND. Values of interval datatypes are sometimes called intervals.

 

因此如果上面的題目中沒有指定選擇三個,那很有可能就做錯了。

 

DATE數據類型在工作中用的最多,一般就是包含年月日時分秒。不過以前從來沒用過日期常量,格式爲DATE'2009-07-28', 不能包含時間部分,且必須是'YYYY-MM-DD'格式,如果要包含時間部分,只能用to_date來轉化了。

 

timestamp和interval這兩個數據類型在工作中用的很少。
timestamp和date差不多,只是後面多了秒以下的部分,可以用0-9位的小數來表示其精度(fractional_seconds_precision)。不過還有個區別是timestamp後面可以加上WITH TIME ZONE 或者 WITH LOCAL TIME ZONE。其中WITH TIME ZONE表示該數據類型中還包含了和UTC之間的時區偏移信息;而WITH LOCAL TIME ZONE的數據類型中,存儲時都是標準化成數據庫的時區,當用戶獲取數據時,oracle會根據用戶本地session中的時區信息來計算和UTC的時區偏移。

 

interval印象裏在8i沒見過,可能是借鑑informix裏面的interval數據類型,不過oracle9i只有兩種interval類型:interval year to month和interval day to second,比informix裏面簡單多了,其中year後可以加一個精度控制,比如 interval year(1) to month,那麼年部分最多就是1位數,該值缺省爲2;day部分也一樣,如inetrval day(3) to second, 表示日部分最多3位數,該值缺省也爲2;second後面還可以加上秒以下的時間精度,如inetrval day(3) to second(3),表示秒以下部分用3位小數表示。 注意這個second後面的數字容易理解爲是秒的精度,實際上是秒以下部分的精度。
interval的常量表示類似如下方式:
interval '3-1' year to month, 表示3年零1個月, 也相當於interval '37' month,即37個月
interval '2 1:0:0' day to second,表示2天1小時。
interval '999 00:01:00.123' day(3) to second (3)

interval數據類型可以和date,timstamp類型進行加減運算,兩個相同的interval類型也可以加減運算,但是interval year to month和interval day to second不能進行運算。

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