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資料型別在表中儲存時間段。