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 '' month from dual;
INTERVAL''MONTH
---------------------------------------
+00-11 SQL> select interval '' year from dual;
INTERVAL''YEAR
---------------------------------------
+11-00 SQL> select interval '' month from dual;
INTERVAL''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 '' year(3) from dual;
INTERVAL''YEAR(3)
---------------------------------------
+101-00 SQL> select interval '-10-5' year to month from dual;
INTERVAL'-10-5'YEARTOMONTH
---------------------------------------
-10-05 SQL> select interval '' year(3) from dual;
select interval '' 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

使用INTERVAL YEAR TO MONTH类型的更多相关文章

  1. INTERVAL YEAR TO MONTH数据类型

    INTERVAL YEAR TO MONTH数据类型 Oracle语法: INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO ...

  2. Oracle 数据库 INTERVAL DAY TO SECOND类型的使用

    INTERVAL DAY TO SECOND类型可以用来存储单位为天和秒的时间间隔.下面这条语句创建一个名为promotions的表,用来存储促销信息.promotions表包含了一个INTERVAL ...

  3. 【SQL】INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND

    INTERVAL YEAR TO MONTH: 作为年和月的时间间隔存储 INTERVAL DAY TO SECOND: 作为天.小时.分和秒的时间间隔存储(DAY,HOUR,MINUTE,SECON ...

  4. INTERVAL 用法 mysql

    原文:https://blog.csdn.net/sqlquan/article/details/82699237 做个例子描述吧,也许更易于理解. 准备: 1.建表 create table INT ...

  5. Oracle间隔(interval)分区

    (一)什么是间隔分区 间隔分区是Oracle 11.1引入的新功能,通过该功能,可以在输入相应分区的数据时自动创建相应的分区.在没有间隔分区技术之前,DBA通常会创建一个maxvalue分区以避免OR ...

  6. oracle之时间类型

    Oracle 时间类型及Timezone 20.1 Oracle的六种时间类型 DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TI ...

  7. ORACLE 常用日期函数

    1 . add_months(arg1,num) 返回日期arg1加num个月的新日期. select add_months(date'2011-1-1',1) from dual; result:  ...

  8. .Net程序员学用Oracle系列(9):系统函数(上)

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.字符函数 1.1.字符函数简介 1.2.语法说明及案例 2.数字函数 2.1.数字函数简介 2.2.语法说明及案例 3.日期 ...

  9. Oracle/Hive/Impala SQL比较1

    5 Function      指数据库内置的function,不讨论UDF.另外,操作符都不比较了,区别不大.   5.1 数学函数 功能 Oracle Hive Impala ABS 绝对值,有 ...

随机推荐

  1. Oracle SQL ANY和ALL语句

    Oracle的嵌套子查询可以使用Some,Any和All对子查询中返回的多行结果进行处理. Some表示满足其中一个的含义,是用or串起来的比较从句. 例如:SELECT * FROM emp WHE ...

  2. centos6.5配置无线网络

    由于安装的是服务器版,所以开机无法连接网络,以下这些情况都是针对驱动已经安装OK.按步骤操作如下(以下操作默认都是在超级管理员权限下进行): 1.测试电脑是否安装wpa_supplicant,测试方法 ...

  3. FileZilla 安装配置参考

    http://www.admin10000.com/document/72.html 解决 NAT issue https://wiki.filezilla-project.org/Network_C ...

  4. CSS样式之背景、文本

    一.背景     1.背景颜色用background-color属性,例如:body{background-color:red}     2.用图像做背景用background-image属性,例如b ...

  5. Web Api 跨域解决方案

    一.跨域问题的由来 同源策略:出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容. 正是由于这个原因,我们不同项目之间的调用就会被浏览器阻 ...

  6. encodeURI与encodeURIComponent的区别

    webservice输出时选择的格式与Content-Type报文头有关 encodeURI与encodeURIComponent的区别:后者会将URI进行编码(包括"://")

  7. Memory Analyzer Blog

    引用:http://memoryanalyzer.blogspot.jp/2008/05/automated-heap-dump-analysis-finding.html Dienstag, 27. ...

  8. NSLog设置不打印

    在调试应用程序的时候经常需要进行打印需要的信息,但是当打印的地方多了之后在真机上跑应用程序就会相应的慢很多,输出语句多了之后会在很大程序上影响应用程序的性能.这里我们可以定义一个宏来控制是否输出调试信 ...

  9. gitosis随记

    0.创建git用户 useradd -m git passwd git 1.安装脚本工具(gitosis依赖python) apt-get install python-setuptools 2.gi ...

  10. NYOJ 110 剑客决斗

    110剑客决斗 在路易十三和红衣主教黎塞留当权的时代,发生了一场决斗.n个人站成一个圈,依次抽签.抽中的人和他右边的人决斗,负者出圈.这场决斗的最终结果关键取决于决斗的顺序.现书籍任意两决斗中谁能胜出 ...