標籤:
INTERVAL DAY TO SECOND類型可以用來儲存單位為天和秒的時間間隔。下面這條語句建立一個名為promotions的表,用來儲存促銷資訊。promotions表包含了一個INTERVAL DAY TO SECOND類型的列duration,該列用來記錄促銷有效時間間隔:
CREATE TABLE promotions ( promotion_id INTEGER CONSTRAINT promotions_pk PRIMARY KEY, name VARCHAR2(30) NOT NULL, duration INTERVAL DAY(3) TO SECOND (4) ); |
注意此處指定了duration列中天的精度為3,秒的小數部分精度為4。這就是說可以為該列的天儲存3位元字,而為該列的秒最多可以在小數點右邊儲存4位元字。
要向資料庫提供一個INTERVAL DAY TO SECOND字面值,可以使用下面的簡化文法:
INTERVAL ‘[+|-][ d] [ h[: m[: s]]]‘ [DAY[( days_precision)]]) [TO HOUR | MINUTE | SECOND[( seconds_precision)]] |
其中
● + 或 - 是一個可選的指示符,用來說明時間間隔是正數還是負數(預設為正數)。
● d 是時間間隔的天數。
● h 是一個選擇性參數,表示時間間隔的小時數。如果指定了天和小時,必須在INTERVAL子句中包含TO HOUR。
● h 是一個選擇性參數,表示時間間隔的分鐘數。如果指定了天和分,必須在INTERVAL子句中包含TO MINUTES。
● s 是一個選擇性參數,表示時間間隔的秒數。如果指定了天和秒,必須在INTERVAL子句中包含TO SECOND。
● days_precision是一個選擇性參數,用來說明天數的精度(預設值為2)。
● seconds_precision是一個選擇性參數,用來說明秒的精度(預設值為6)。
表5-12給出了幾個INTERVAL DAY TO SECOND類型的時間間隔字面量的例子。
表5-12 時間間隔字面量的例子
時間間隔字面量 |
說明 |
INTERVAL ‘3’ DAY |
時間間隔為3天 |
INTERVAL ‘2’ HOUR |
時間間隔為2小時 |
INTERVAL ‘25’ MINUTE |
時間間隔為25分鐘 |
INTERVAL ‘45’ SECOND |
時間間隔為45秒 |
INTERVAL ‘3 2’ DAY TO HOUR |
時間間隔為3天零2小時 |
INTERVAL ‘3 2:25’ DAY TO MINUTE |
時間間隔為3天零2小時25分 |
INTERVAL ‘3 2:25:45’ DAY TO SECOND |
時間間隔為3天零2小時25分45秒 |
INTERVAL ‘123 2:25:45.12’ DAY(3) TO SECOND(2) |
時間間隔為123天零2小時25分45.12秒; 天的精度是3位元字,秒的小數部分的精度是2位元字 |
INTERVAL ‘3 2:00:45’ DAY TO SECOND |
時間間隔為3天2小時0分45秒 |
INTERVAL ‘-3 2:25:45’ DAY TO SECOND |
時間間隔為負數,值為3天零2小時25分45秒 |
INTERVAL ‘1234 2:25:45’ DAY(3) TO SECOND |
時間間隔無效,因為天的位元超過了指定的精度3 |
INTERVAL ‘123 2:25:45.123’ DAY TO SECOND(2) |
時間間隔無效,因為秒的小數部分的位元超過了指定的精度2 |
下面這個INSERT語句向promotions表添加一行記錄:
INSERT INTO promotions (promotion_id, name, duration) VALUES (1, ‘10% off Z Files‘, INTERVAL ‘3‘ DAY); INSERT INTO promotions (promotion_id, name, duration) VALUES (2, ‘20% off Pop 3‘, INTERVAL ‘2‘ HOUR); INSERT INTO promotions (promotion_id, name, duration) VALUES (3, ‘30% off Modern Science‘, INTERVAL ‘25‘ MINUTE); INSERT INTO promotions (promotion_id, name, duration) VALUES (4, ‘20% off Tank War‘, INTERVAL ‘45‘ SECOND); INSERT INTO promotions (promotion_id, name, duration) VALUES (5, ‘10% off Chemistry‘, INTERVAL ‘3 2:25‘ DAY TO MINUTE); INSERT INTO promotions (promotion_id, name, duration) VALUES (6, ‘20% off Creative Yell‘, INTERVAL ‘3 2:25:45‘ DAY TO SECOND); INSERT INTO promotions (promotion_id, name, duration) VALUES (7, ‘15% off My Front Line‘, INTERVAL ‘123 2:25:45.12‘ DAY(3) TO SECOND(2)); |
下面這個查詢對promotions表進行檢索,注意duration列值的格式化:
SELECT * FROM promotions; PROMOTION_ID NAME DURATION ------------ ------------------------------ ------------------ 1 10% off Z Files +003 00:00:00.0000 2 20% off Pop 3 +000 02:00:00.0000 3 30% off Modern Science +000 00:25:00.0000 4 20% off Tank War +000 00:00:45.0000 5 10% off Chemistry +003 02:25:00.0000 6 20% off Creative Yell +003 02:25:45.0000 7 15% off My Front Line +123 02:25:45.1200 |
Oracle 資料庫 INTERVAL DAY TO SECOND類型的使用