您的位置:首页 > 数据库 > Oracle

46.Oracle数据库SQL开发之 日期和时间的存储与处理——使用时间间隔

2015-11-09 22:08 573 查看
46.Oracle数据库SQL开发之 日期和时间的存储与处理——使用时间间隔
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/49745711

9i数据库引入了一种新特性,可以用来存储时间间隔。

1.  使用INTERVAL YEAR TO MONTH类型

INTERVAL YAR TO MONTH类型可以用来存储单位为年和月的时间间隔。
创建表:
CREATE TABLE coupons (
 coupon_id INTEGER CONSTRAINT coupons_pk PRIMARY KEY,
 name VARCHAR2(30) NOT NULL,
 duration INTERVAL YEAR(3) TO MONTH
);
INSERT INTO coupons (
 coupon_id, name, duration
) VALUES (
 1, '$1 off Z Files', INTERVAL '1' YEAR
);
 
INSERT INTO coupons (
 coupon_id, name, duration
) VALUES (
 2, '$2 off Pop 3', INTERVAL '11' MONTH
);
 
INSERT INTO coupons (
 coupon_id, name, duration
) VALUES (
 3, '$3 off Modern Science', INTERVAL '14' MONTH
);
INSERT INTO coupons (
 coupon_id, name, duration
) VALUES (
 4, '$2 off Tank War', INTERVAL '1-3' YEAR TO MONTH
);
 
INSERT INTO coupons (
 coupon_id, name, duration
) VALUES (
 5, '$1 off Chemistry', INTERVAL '0-5' YEAR TO MONTH
);
 
INSERT INTO coupons (
 coupon_id, name, duration
) VALUES (
 6, '$2 off Creative Yell', INTERVAL '123' YEAR(3)
);
然后执行:
store@PDB1> select * fromcoupons;
 
 COUPON_ID NAME
----------------------------------------
DURATION
---------------------------------------------------------------------------
          1 $1 off Z Files
+001-00
 
          2 $2 off Pop 3
+000-11
 
          3 $3 off Modern Science
+001-02
 
          4 $2 off Tank War
+001-03
 
          5 $1 off Chemistry
+000-05
 
          6 $2 off Creative Yell
+123-00
 
 
6 rows selected.

2.  使用INTERVAL DAY TO SECOND 类型

INTERVAL DAY TO SECOND类型可以用来存储单位为天和秒的时间间隔。

CREATE TABLE promotions (

 promotion_id INTEGER CONSTRAINT promotions_pk PRIMARY KEY,

 name VARCHAR2(30) NOT NULL,

 duration INTERVAL DAY(3) TO SECOND (4)

);

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

);

执行如下:

store@PDB1> 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

 

 

7 rows selected.

3.  与时间间隔有关的函数

3.1         NUMTODSINTERVAL()

NUMTODSINTERVAL(x,interval_unit)用于将以interval_unit指定的值为单位的数字x转换为一个INTERVALDAY TO SECOND类型,interval_unit参数可以设置为DAY,HOUR,MINUTE或SECOND。

执行如下:

store@PDB1> select numtodsinterval(1.5,'day'),

   numtodsinterval(3.25,'hour'),

   numtodsinterval(5,'minute'),

   numtodsinterval(10.123456789,'second')

    from dual;

NUMTODSINTERVAL(1.5,'DAY')

---------------------------------------------------------------------------

NUMTODSINTERVAL(3.25,'HOUR')

---------------------------------------------------------------------------

NUMTODSINTERVAL(5,'MINUTE')

---------------------------------------------------------------------------

NUMTODSINTERVAL(10.123456789,'SECOND')

---------------------------------------------------------------------------

+000000001 12:00:00.000000000

+000000000 03:15:00.000000000

+000000000 00:05:00.000000000

+000000000 00:00:10.123456789

 

3.2         NUMTOYMINTERVAL()

NUMTOYMINTERVAL(x,interval_unit)用于将以interval_unit指定的值为单位的数字x转换为一个INTERVALYEAR TO MONTH类型,interval_unit参数可以设置为YEAR或MONTH。

store@PDB1> selectnumtoyminterval(1.5,'year'),

   numtoyminterval(3.25,'month') from dual;

 

NUMTOYMINTERVAL(1.5,'YEAR')

---------------------------------------------------------------------------

NUMTOYMINTERVAL(3.25,'MONTH')

---------------------------------------------------------------------------

+000000001-06

+000000000-03

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: