在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数据类型。它们之间也可以做加减运算得到新的时间间隔。

列表a说明了怎样创建一个表格来记录一个事件的开始时间和持续时间,如实验等。数据被收集以后,sql中内置的摘要函数不需要与原始单位秒进行相互转换,就可以报告总的持续时间和平均持续时间。

列表a

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)

列表b给出了一个运用这种方法的例子。

列表b

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 数据 时间间隔,如何掌握 Oracle 中的时间间隔型数据相关推荐

  1. Oracle数据库中插入日期型数据

    如果插入Oracle的当前系统时间可以用 SYSDATE INSERT INTO FLOOR VALUES ( SYSDATE ) ; 往Oracle数据库中插入日期型数据(to_date的用法) 今 ...

  2. oracle中插入日期型数据,ORACLE插入日期数据

    ORACLE插入日期数据 oracle数据库插入日期型数据 往Oracle数据库中插入日期型数据(to_date的用法) INSERT  INTO  FLOOR  VALUES  ( to_date ...

  3. 数组x中数据复制到数组y中,重复的数据只存储一次,最后输出y;计算x中数据的平均值ave及大于平均值的元素个数n。c++实现

    题目描述 编程序,实现如下功能: (1)定义两个一维数组x,y,不超过50个元素. (2)从键盘输入k个整数到数组x中. (3)计算x中数据的平均值ave及大于平均值的元素个数n并输出. (4)将数组 ...

  4. 如何在SQL中处理层次型数据

    最近在做公司的认证系统,看了开源项目如apache shiro跟spring security,还不知道是自己构建还是用上述代码.最近的考虑点是如何处理层次型数据,因为打算给user构造一个有层次的g ...

  5. C语言中字符串数据转为整型数据并提取整型数据

    方法一:利用库中的atoi函数,将字符类型转换为整型,则可提取出整型. #include<stdio.h> #include<string.h> int main() {cha ...

  6. Arduino 从串口接收到的数据中提取整型数据(parseInt)

    Arduino 从串口接收到的数据中提取整型数据(parseInt) 函数说明 parseInt函数可用于从设备接收到的数据中寻找整数数值. 该函数属于Stream类.该函数可被Stream类的子类所 ...

  7. 数据逻辑结构在计算机存储器中的表示称为数据的存储结构

    数据逻辑结构在计算机存储器中的表示称为数据的存储结构(或存储表示),也称为物理结构.通常情况下,同一种逻辑结构可以设计多种存储结构,在不同的存储结构中,实现同一种运算的算法可能不同. 逻辑结构.存储结 ...

  8. boot spring 接口接收数据_在 Spring Boot 中使用 Dataway 配置数据查询接口

    Dataway介绍 Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具.使得使用者无需开发任何代码就配置一个满足需求的接口. 整个接口配置.测试.冒烟.发布.一站式都通过 ...

  9. mysql十万条数据_2秒内向数据库中插入十万条数据?

    怎么向数据库中快速插入十万条数据呢,当然得需要对比才能看到效果,今天给大家亲身测了两种方法对比,差别25倍左右 1,数据库用sql server 2008 r2,表结构非常简单,四个字段,建数据表的s ...

  10. xlsx表格怎么筛选重复数据_怎样在excel2010中筛选出重复数据呢?

    数据是信息的表现形式和载体,可以是符号.文字.数字.语音.图像.视频等.数据和信息是不可分离的,数据是信息的表达,信息是数据的内涵.在这一篇教程里面,小编主要和大家简单的介绍一下:怎样在Excel20 ...

最新文章

  1. 大咖说:出道十五载,认知五迭代
  2. md5加密算法原理及其GO语言实现
  3. echo和print 的区别
  4. 基于深度学习的CTR模型DeepCTR 更新啦!
  5. C++(15)--面向对象编程实践-欢乐斗地主(vector的花式输出)
  6. 为什么“消费降级”突然火了?数字基尼系数给你一点理论支撑
  7. DP || HYSBZ 1207 打鼹鼠
  8. linux wsdl2java_Web Service开发之利用WSDL生成Java工程
  9. IPFS 相关开发资源汇总
  10. 电磁场理论-麦克斯韦方程组
  11. linux实时监测cpu温度,Linux 监控CPU 温度
  12. 如何区分网线是几类的_怎么看网线是几类网线?
  13. LeetCode | 面试题04. 二维数组中的查找【剑指Offer】【Python】
  14. 软件充值功能测试点有哪些?以手机话费充值为例
  15. TCP粘包的分析和处理
  16. ubuntu上安装微信教程
  17. ios 证书生成流程
  18. Taro React组件使用(1) —— Overlay 遮罩层【渐入渐出动画遮罩层】
  19. 对当前网上公开的聊天对话机器人语料整理
  20. 直接看见宇宙黑洞不是梦?最新天文研究表示有重大成果

热门文章

  1. 设计模式的理解:解释器模式 Interpreter
  2. studioone精调效果包_cnocr: 极简的中文OCR Python包
  3. IPC\DVS\DVR与NVR之间的区别
  4. 利用lrz、lsz工具在linux与windows之间传输文件
  5. office word中利用宏编程批量调节图片的亮度和对比度
  6. delete释放基本数据类型和对象数组的方法的区别和原因
  7. mysql复制文件迁移后看不到表_mysql 直接拷贝data 目录下文件 进行数据库迁移时遇到的一些问题??...
  8. php MySQL快速入门_PHP 连接 MySQL
  9. 常量、变量、数据类型
  10. R语言实战-统计分析基础-描述性统计4-psych-describe