网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.对rman命令行为的操作简单分析.
.Oracle临时表使用补充.
.基于Oracle的高性能动态SQL程序开.
.通过LEI技术实现NOTES与SQL2000数.
.Oracle9i在线表格重定义来组织表.
.象ROWNUM取得查询记录集第M到N条.
.Oracle多行记录字符串综合操作几.
.oracle 使用杂记二.
.Oracle 10g RMAN的备份测试.
.Ruby on Rails之Oracle应用.
.ORACLE里取随机数的方法.
.用VC开发基于ORACLE数据库方法.
.TOP 20 ISSUES FOR ALL GATEWAYS.
.Oracle10g回溯版本查询追踪行变化.
.Oracle RMAN快速入门指南.
.印度将于下周举办Oracle Open Wo.
.Oracle数据库处理多媒体信息.
.Oracle 和 PHP 使用入门.
.Oracle数据库软件包远程溢出漏洞.
.Oracle数据库网络与安全之FAQ汇集.

学会使用Oracle中的时间间隔型数据

发表日期:2008-2-9


在9i 版本以前,Oracle 没有内置的方式来记录时间的流逝。DATE型数据用来记录单独的时间点;但是要表达一个时间量(也就是一个间隔),数据库的设计者就必须把时间间隔转换成原始单位秒,然后用一个NUMBER列来保存它。 虽然NUMBER这个数据类型可以以秒为单位准确地表示时间,但是它使得时间的计算变得很困难。比如,60秒是1分钟,60分钟是1个小时,24个小时等于1天——这些数字在以十进制为基础的数字系统中都是非常蹩脚的。 在Oracle 9i中,按照SQL 99标准,增加了时间间隔型数据INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND,它们和其他几种数据类型一起使得对时间的处理更加准确。TIMESTAMP、TIMESTAMP WITH TIME ZONE和TIMESTAMP WITH LOCAL TIME ZONE等数据类型都把时间的表达精确到了若干分之一秒,而且后面两种还解决了地理位置造成的时间变化。 在SQL和PL/SQL中,你都可以用时间间隔型数据,它们都是用同一种方式规定的:
INTERVAL YEAR[(year_precision)] TO MONTH INTERVAL DAY[(day_precision)] TO SECOND[(fractional_seconds_precision)]
对于精确数值,规定有缺省值:年和日是两位数,若干分之一秒是六位数。 时间间隔的大小由INTERVAL来表示,后面紧接一个放在单引号中的表达式,以及用来解释该表达式的文字。用YEAR TO MONTH表示时间间隔大小时要在年和月之间用一个连字符(-) 连接。而DAY TO SECOND表示时间间隔大小时要在日和时间之间用一个空格连接。举个例子来说,下面是2年6个月的时间间隔的表示方法:
INTERVAL '2-6' YEAR TO MONTH
下面的例子表示3天12个小时30分钟6.7秒:
INTERVAL '3 12:30:06.7' DAY TO SECOND(1)
时间间隔可以为正,也可以为负。它们可以从各种TIMESTAMP数据类型中加上或者减去,从而得到一个新的TIMESTAMP数据类型。它们之间也可以做加减运算得到新的时间间隔。下面的列表说明了怎样创建一个表格来记录一个事件的开始时间和持续时间,如实验等。数据被收集以后,SQL中内置的摘要函数不需要与原始单位秒进行相互转换,就可以报告总的持续时间和平均持续时间。
CREATE TABLE eXPeriment (experiment_id NUMBER(9), experiment_desc VARCHAR2(80), experiment_start TIMESTAMP, experiment_duration INTERVAL DAY(1) TO SECOND(4) ); Table created. INSERT INTO experiment VALUES ( 1, 'Busted urban myth', '01-JUN-2006 02:00:00 PM', INTERVAL '1 2:31:15.1250' DAY(1) TO SECOND(4) ); 1 row created. col experiment_desc format a40 col experiment_start format a30 col experiment_duration format a20 SELECT * FROM experiment; EXPERIMENT_ID EXPERIMENT_DESC EXPERIMENT_START EXPERIMENT_DURATION 1 Busted urban myth 01-JUN-06 02.00.00.000000 PM +1 02:31:15.1250 -- Now compute the experiment's ending time SELECT experiment_id, experiment_start, experiment_start + experiment_durationexperiment_end FROM experiment; EXPERIMENT_ID EXPERIMENT_START EXPERIMENT_END 1 01-JUN-06 02.00.00.000000 PM 02-JUN-06 04.31.15.125000000 PM
但遗憾的是, TO_CHAR函数中没有包括任何能够映射到各个时间间隔数据类型片段的格式模型。但是,你可以用新的EXTRACT函数来提取和合并这些片段。格式如下: EXTRACT(timepart FROM interval_expression) 下面给出了一个运用这种方法的例子。
SELECT EXTRACT(DAY FROM experiment_duration) ' days, ' EXTRACT (HOUR FROM experiment_duration) ' hours, ' EXTRACT (MINUTE FROM experiment_duration) ' minutes' Duration FROM experiment; DURATION 1 days, 2 hours, 31 minutes
首先,从experiment_duration列中将天数提取出来,文字“Days”是与之相联的。对于实验持续时间中的小时和分钟部分,操作与上述方法一样。

上一篇:教你如何快速转移Oracle中海量数据 人气:643
下一篇:新建Oracle数据库回滚段具体操作过程 人气:708
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐