Oracle Interval類型

在本教學中,我們將介紹Oracle INTERVAL數據類型,並演示如何有效處理區間值。

Oracle INTERVAL數據類型簡介

Oracle提供了兩種日期時間數據類型:DATETIMESTAMP用於存儲時間點數據。另外,它提供INTERVAL數據類型用於存儲一段時間。

有兩種類型的INTERVAL

  • INTERVAL YEAR TO MONTH - 間隔使用年份和月份。
  • INTERVAL DAY TO SECOND - 使用包括小數秒在內的天,小時,分鐘和秒存儲間隔。

1. Oracle INTERVAL YEAR TO MONTH

INTERVAL YEAR TO MONTH數據類型使用YEARMONTH字段存儲一段時間。

下麵介紹一個INTERVAL YEAR TO MONTH

INTERVAL YEAR [(year_precision)] TO MONTH

year_precision代表YEAR字段中的位數。範圍從09

year_precision是可選的。如果省略year_precision參數,則默認為2。也就是說,默認情況下,最多可以存儲99年和11個月的期限,這個期限必須小於100年。

2. Oracle INTERVAL YEAR TO MONTH文字

要指定INTERVAL YEAR TO MONTH數據類型的文字值,可以使用以下格式:

INTERVAL 'year[-month]' leading (precision) TO trailing

leadingtrailing可以是YEARMONTH

以下是參數:

  • year[-month]
    yearmonth是整個區間的leadingtrailing的整數。 如果leadingYEARtrailingMONTH,那麼month字段的範圍從011
    trailing列必須小於leading列。 例如,INTERVAL '1-2' MONTH TO YEAR是無效的,因為leadingYEAR大於MONTHleading字段。
  • precision
    leading字段中的最大數字位數。精度範圍為:0~9,默認值為2

下表說明了INTERVAL YEAR TO MONTH文字的示例:

INTERVAL YEAR TO MONTH文字 含意
INTERVAL '120-3' YEAR(3) TO MONTH 間隔120年,3個月; 由於前導字段的值大於默認精度(2位),因此必須指定前導字段精度YEAR(3)
INTERVAL '105' YEAR(3) 間隔105年0個月。
INTERVAL '500' MONTH(3) 間隔500個月。
INTERVAL '9' YEAR 間隔9年,相當於INTERVAL '9-0' YEAR TO MONTH
INTERVAL '40' MONTH 40個月或3年4個月,相當於INTERVAL '3-4' YEAR TO MONTH
INTERVAL '180' YEAR 無效的時間間隔,因為’180’有3個數字,它大於默認精度(2)

3. Oracle INTERVAL YEAR TO MONTH示例

首先,創建一個名為candidates的新表格:

CREATE TABLE candidates (
    candidate_id NUMBER,
    first_name VARCHAR2(50) NOT NULL,
    last_name VARCHAR2(50) NOT NULL,
    job_title VARCHAR2(255) NOT NULL,
    year_of_experience INTERVAL YEAR TO MONTH,
    PRIMARY KEY (candidate_id)
);

在此表中,有一個year_of_experience列,其數據類型為INTERVAL YEAR TO MONTH

其次,將數據插入candidates表:

INSERT INTO candidates (
    first_name,
    last_name,
    job_title,
    year_of_experience
    )
VALUES (
    'Camila',
    'Kramer',
    'SCM Manager',
    INTERVAL '10-2' YEAR TO MONTH
    );

在這個上面這個插入語句中,在year_of_experience列中插入了一個INTERVAL '10-2' YEAR TO MONTH 間隔字面值。

INSERT INTO candidates (
    first_name,
    last_name,
    job_title,
    year_of_experience
    )
VALUES (
    'Keila',
    'Doyle',
    'SCM Staff',
    INTERVAL '9' MONTH
    );

在這個語句中,在year_of_experience列中插入了一個為INTERVAL '9' MONTH的間隔字面值。

第三,查詢INTERVAL YEAR TO MONTH列的數據:

SELECT
  *
FROM
  candidates;

執行上面查詢語句,得到以下結果 -

4. Oracle INTERVAL DAY TO SECOND數據類型

INTERVAL DAY TO SECOND是一種按天,小時,分鐘和秒鐘存儲一段時間。

以下顯示INTERVAL DAY TO SECOND數據類型的語法:

INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]

在上面這個語法中,

  • day_precision - 是DAY字段中的位數。取值範圍是0~9,缺省值是2
  • fractional_seconds_precisionSECOND字段小數部分的位數。範圍從0~9。如果省略fractional_seconds_precision,則默認為6

5. Oracle INTERVAL YEAR TO SECOND字面值

INTERVAL YEAR TO SECOND的字面值形式如下:

INTERVAL leading (leading_precision) to trailing(fractional_seconds_precision)

下表顯示了INTERVAL YEAR TO SECOND文字的一些示例:

INTERVAL YEAR TO SECOND字面值 含意
INTERVAL '11 10:09:08.555' DAY TO SECOND(3) 11天,10小時,09分08秒,555/千秒。
INTERVAL '11 10:09' DAY TO MINUTE 11天,10小時和09分鐘。
INTERVAL '100 10' DAY(3) TO HOUR 100天10個小時。
INTERVAL '999' DAY(3) 999天
INTERVAL '09:08:07.6666666' HOUR TO SECOND(7) 9小時08分鐘和7.6666666秒。
INTERVAL '09:30' HOUR TO MINUTE 9小時30分鐘。
INTERVAL '8' HOUR 8小時
INTERVAL '15:30' MINUTE TO SECOND 15分30秒。
INTERVAL '30' MINUTE 30分鐘
INTERVAL '5' DAY 5天
INTERVAL '40' HOUR 40小時
INTERVAL '15' MINUTE 15分鐘
INTERVAL '250' HOUR(3) 250個小時
INTERVAL '15.6789' SECOND(2,3) 四捨五入到15.679秒。 由於精度為3,分數秒’6789’被舍入為’679’

在本教學中,您已學習如何使用Oracle INTERVAL數據類型在表中存儲時間段。


上一篇: Oracle Timestamp類型 下一篇: Oracle插入數據