zoukankan      html  css  js  c++  java
  • 使用INTERVAL YEAR TO MONTH类型

    Oracle Database 9i数据库引入了一种新特性,可以用来存储时间间隔。时间间隔的例子包括:

    ● 1年零3个月

    ● 25个月

    ● -3天5小时16分

    ● 1天7小时

    ● -56小时

    注意:

    不要混淆时间间隔与时间值或时间戳的概念。时间间隔记录的是一段时间长度(例如1年零3个月),而时间值或时间戳记录的是一个特定的日期和时间(例如2006年10月28日下午7点32分16秒)。

    在本书假想的在线商店这个例子中,我们可能想在特定的一段时间内对某种商品打折。例如,可以让顾客使用优惠券,其有效期为几个月;或者为在几天内促销产品而打折。本节后面将介绍几个使用优惠券和促销的例子。

    表5-10列出了时间间隔的类型。

    表5-10  时间间隔类型

        

        

    INTERVAL YEAR[ (years_precision)]TO MONTH

    存储一个时间间隔,其单位为年和月;可以通过指定可选的years_precision参数来指定年的精度,该参数是一个0~9的整数。默认的精度为2,意思是可以在时间间隔中为年数存储两位数字。如果试图向表中添加一行年数超过INTERVAL YEAR TO MONTH列可以存储的记录,就会返回一个错误。时间间隔既可以存储正数,也可以存储负数

    INTERVAL DAY[(days_precision)]

    TO SECOND[( seconds_precision)]

    存储一个时间间隔,其单位为天和秒;可以通过指定可选的days_precision参数来指定天的精度,该参数是一个0~9的整数,默认值为2。另外,还可以通过指定可选的seconds_precision参数来指定秒的小数部分的精度,该参数是一个0~9的整数,默认值为6。时间间隔既可以存储正数,也可以存储

    表5-11  时间间隔字面量的例子

    时间间隔字面量

    说明

    INTERVAL '1' YEAR

    时间间隔为1年

    INTERVAL '11' MONTH

    时间间隔为11个月

    INTERVAL '14' MONTH

    时间间隔为14个月(等于1年零2个月)

    INTERVAL '1-3' YEAR TO MONTH

    时间间隔为1年零3个月

    INTERVAL '0-5' YEAR TO MONTH

    时间间隔为0年5个月

    INTERVAL '123' YEAR(3) TO MONTH

    时间间隔为123年,精度为3位数字

    INTERVAL '-1-5' YEAR TO MONTH

    时间间隔为负数,值为1年零5个月

    INTERVAL '1234' YEAR(3)

    时间间隔无效:1234包含4位数字,因此它包含的数字超过了精度(只允许最多3位数字)所允许的范围

    SQL示例:

    SQL> select interval '11' month from dual;
    INTERVAL'11'MONTH
    ---------------------------------------
    +00-11
    
    SQL> select interval '11' year from dual;
    INTERVAL'11'YEAR
    ---------------------------------------
    +11-00
    
    SQL> select interval '14' month from dual;
    INTERVAL'14'MONTH
    ---------------------------------------
    +01-02
    
    SQL> select interval '1-3' year to month from dual;
    INTERVAL'1-3'YEARTOMONTH
    ---------------------------------------
    +01-03
    
    SQL> select interval '0-3' year to month from dual;
    INTERVAL'0-3'YEARTOMONTH
    ---------------------------------------
    +00-03
    SQL> select interval '101' year(3) from dual;
    INTERVAL'101'YEAR(3)
    ---------------------------------------
    +101-00
    
    SQL> select interval '-10-5' year to month from dual;
    INTERVAL'-10-5'YEARTOMONTH
    ---------------------------------------
    -10-05
    
    SQL> select interval '1234' year(3) from dual;
    select interval '1234' year(3) from dual
    ORA-01873: 间隔的前导精度太小
    
    SQL> 

    5.8.1  使用INTERVAL YEAR TO MONTH类型

    INTERVAL YEAR TO MONTH类型可以用来存储单位为年和月的时间间隔。下面这条语句创建一个名为coupons的表,用来存储优惠券信息。coupons表包含了一个INTERVAL YEAR TO MONTH类型的列duration,该列用来记录优惠券有效的时间间隔。注意,此处指定了duration列的精度为3,这就是说可以为该列的年数部分存储3位数字:

     CREATE TABLE coupons (
    coupon_id INTEGER CONSTRAINT coupons_pk PRIMARY KEY,
    name VARCHAR2(30) NOT NULL,
    duration INTERVAL YEAR(3) TO MONTH
    );

     

    要向数据库提供一个INTERVAL YEAR TO MONTH字面值,可以使用下面的简化语法:

    INTERVAL '[+|-][y][-m]' [YEAR[( years_precision)])] [TO MONTH]

     

     

    其中

    ● + 或 - 是一个可选的指示符,用来说明时间间隔是正数还是负数(默认为正数)。

    ● y 是一个可选参数,表示时间间隔的年数部分。

    ● m 是一个可选参数,表示时间间隔的月数部分。如果指定了年数和月数,必须在INTERVAL子句中包含TO MONTH。

    ● year_precision是一个可选参数,用来说明年数的精度(默认为2)。

    《FROM:http://www.cnblogs.com/theurgy/articles/1549454.html

  • 相关阅读:
    leetcode 268. Missing Number
    DBSCAN
    python二维数组初始化
    leetcode 661. Image Smoother
    leetcode 599. Minimum Index Sum of Two Lists
    Python中的sort() key含义
    leetcode 447. Number of Boomerangs
    leetcode 697. Degree of an Array
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(1月3日)
    北京Uber优步司机奖励政策(1月2日)
  • 原文地址:https://www.cnblogs.com/rusking/p/4599599.html
Copyright © 2011-2022 走看看