在本教學中,我們將介紹Oracle INTERVAL數據類型,並演示如何有效處理區間值。
Oracle INTERVAL數據類型簡介
Oracle提供了兩種日期時間數據類型:DATE和TIMESTAMP用於存儲時間點數據。另外,它提供INTERVAL數據類型用於存儲一段時間。
有兩種類型的INTERVAL:
- INTERVAL YEAR TO MONTH - 間隔使用年份和月份。
- INTERVAL DAY TO SECOND - 使用包括小數秒在內的天,小時,分鐘和秒存儲間隔。
1. Oracle INTERVAL YEAR TO MONTH
INTERVAL YEAR TO MONTH數據類型使用YEAR和MONTH字段存儲一段時間。
下麵介紹一個INTERVAL YEAR TO MONTH:
INTERVAL YEAR [(year_precision)] TO MONTH
year_precision代表YEAR字段中的位數。範圍從0到9。
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
leading和trailing可以是YEAR或MONTH。
以下是參數:
- year[-month]
year和month是整個區間的leading和trailing的整數。 如果leading是YEAR,trailing是MONTH,那麼month字段的範圍從0到11。trailing列必須小於leading列。 例如,INTERVAL '1-2' MONTH TO YEAR是無效的,因為leading列YEAR大於MONTH的leading字段。 - 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_precision 是
SECOND字段小數部分的位數。範圍從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數據類型在表中存儲時間段。
