(一)INTERVAL DAY TO SECOND类型可以用来存储单位为天到秒的时间间隔。
INTERVAL '[+|-][ d] [ h[: m[: s]]]' [DAY[( days_precision)]]) [TO HOUR | MINUTE | SECOND[( seconds_precision)]]
● 范围值:
HOUR: 0 to 23
MINUTE: 0 to 59
SECOND: 0 to 59.999999999
● + 或 - 是一个可选的指示符,用来说明时间间隔是正数还是负数(默认为正数)。
● d 是时间间隔的天数。
● h 是一个可选参数,表示时间间隔的小时数。如果指定了天和小时,必须在INTERVAL子句中包含TO HOUR。
● h 是一个可选参数,表示时间间隔的分钟数。如果指定了天和分,必须在INTERVAL子句中包含TO MINUTES。
● s 是一个可选参数,表示时间间隔的秒数。如果指定了天和秒,必须在INTERVAL子句中包含TO SECOND。
● days_precision是一个可选参数,用来说明天数的精度(默认值为2)。
● seconds_precision是一个可选参数,用来说明秒的精度(默认值为6)。
时间间隔字面量 | 说明 | 数据库中显示结果 |
INTERVAL '3' DAY | 时间间隔为3天 | +003 00:00:00.0000 |
INTERVAL '10' HOUR | 时间间隔为10小时 | +000 10:00:00.0000 |
INTERVAL '20' MINUTE | 时间间隔为20分钟 | +000 00:20:00.0000 |
INTERVAL '30' SECOND | 时间间隔30秒 | +000 00:00:30.0000 |
INTERVAL '3 10' DAY TO HOUR | 时间间隔3天10小时 | +003 10:00:00.0000 |
INTERVAL '3 10:20' DAY TO MINUTE | 时间间隔3天10小时20分钟 | +003 10:20:00.0000 |
INTERVAL '3 10:20:30' DAY TO SECOND | 时间间隔3天10小时20分钟30秒 | +003 10:20:30.0000 |
INTERVAL '3 10:20:30.1234' DAY TO SECOND | 时间间隔3天10小时20分钟30.1234秒 | +003 10:20:30.1234 |
INTERVAL '3 10:20:30.1234' DAY TO SECOND(2) | 时间间隔3天10小时20分钟30.1234秒,秒的时间精度为2 | +003 10:20:30.1200 |
INTERVAL '3 10:20:30.123456' DAY TO SECOND | 时间间隔3天10小时20分钟30.123456秒,但秒的时间精度为4 | +003 10:20:30.1235 |
INTERVAL '1234 10:20:30.1234' DAY TO SECOND | ORA-01873: 间隔的前导精度太小 | PS:INTERVAL DAY(3) TO SECOND(4) |
(二)创建测试表并插入数据
--创建测试表 CREATE TABLE promotions ( promotion_id INTEGER CONSTRAINT promotions_pk PRIMARY KEY, name VARCHAR2(30) NOT NULL, duration INTERVAL DAY(3) TO SECOND (4) ); --时间间隔为3天 INSERT INTO promotions (promotion_id, name, duration) VALUES (1, '10% off Z Files', INTERVAL '3' DAY); --时间间隔为2小时 INSERT INTO promotions (promotion_id, name, duration) VALUES (2, '20% off Pop 3', INTERVAL '2' HOUR); --时间间隔为25分钟 INSERT INTO promotions (promotion_id, name, duration) VALUES (3, '30% off Modern Science', INTERVAL '25' MINUTE); --时间间隔为45秒 INSERT INTO promotions (promotion_id, name, duration) VALUES (4, '40% off Tank War', INTERVAL '45' SECOND); --时间间隔为3天2小时25分钟 INSERT INTO promotions (promotion_id, name, duration) VALUES (5, '50% off Chemistry', INTERVAL '3 2:25' DAY TO MINUTE); --时间间隔为3天2小时25分钟45秒 INSERT INTO promotions (promotion_id, name, duration) VALUES (6, '60% off Creative Yell', INTERVAL '3 2:25:45' DAY TO SECOND); --时间间隔为123天2小时25分钟45秒,秒后跟2为精度 INSERT INTO promotions (promotion_id, name, duration) VALUES (7, '70% off My Front Line', INTERVAL '123 2:25:45.12' DAY(3) TO SECOND(2));
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 40% off Tank War +000 00:00:45.0000
5 50% off Chemistry +003 02:25:00.0000
6 60% off Creative Yell +003 02:25:45.0000
7 70% off My Front Line +123 02:25:45.1200