在本教學中,我們將介紹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
數據類型在表中存儲時間段。