使用INTERVAL DAY TO SECOND类型

本文介绍了Oracle数据库中的INTERVAL DAY TO SECOND类型,用于存储天和秒的时间间隔。通过示例展示了如何创建包含此类别的表,以及如何插入和格式化时间间隔数据。此外,还提供了合法和无效的INTERVAL DAY TO SECOND字面量示例。
使用INTERVAL DAY TO SECOND类型

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。
● m 是一个可选参数,表示时间间隔的分钟数。如果指定了天和分,必须在INTERVAL子句中包含TO MINUTES。
● s 是一个可选参数,表示时间间隔的秒数。如果指定了天和秒,必须在INTERVAL子句中包含TO SECOND。
● days_precision是一个可选参数,用来说明天数的精度(默认值为2)。
● seconds_precision是一个可选参数,用来说明秒的精度(默认值为6)。

以下给出了几个INTERVAL DAY TO SECOND类型的时间间隔字面量的例子。

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
 -------- ---------------------   ------------------
        10% off Z Files          003 00:00:00.0000
        20% off Pop 3            000 02:00:00.0000
        30% off Modern Science   000 00:25:00.0000
        20% off Tank War         000 00:00:45.0000
        10% off Chemistry        003 02:25:00.0000
        20% off Creative Yell    003 02:25:45.0000
        15% off My Front Line    123 02:25:45.1200

转自:http://blog.youkuaiyun.com/tianzengyan/article/details/5604692

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值