我们都知道date和timestamp都是对日期和时间的表示,只是两种类型的精确度不同,前者精确到秒,后者精确到小数秒(fractional_seconds_precision),可以是

0 to 9,缺省是6。

但是对date类型的运算很简单,有很多函数可用来处理;而两个timestamp的差则是很直观地显示为多少天+多少小时+多少分钟+多少秒+多少小数秒,

SQL> create table test (T1 TIMESTAMP(6),

2 T2 TIMESTAMP(6));

表已创建。

SQL> insert into test values(

2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd

hh24:mi:ss.ff'),

3 to_timestamp('2006-01-01 12:20:10.2','yyyy-mm-dd

hh24:mi:ss.ff'));

已创建 1 行。

SQL>

SQL> insert into test values(

2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd

hh24:mi:ss.ff'),

3 to_timestamp('2006-01-02 12:20:10.2','yyyy-mm-dd

hh24:mi:ss.ff'));

已创建 1 行。

SQL>

SQL> insert into test values(

2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd

hh24:mi:ss.ff'),

3 to_timestamp('2006-01-02 13:40:20.2','yyyy-mm-dd

hh24:mi:ss.ff'));

已创建 1 行。

SQL> commit;

提交完成。

SQL>

两个timestamp的差则是很直观地显示为多少天+多少小时+多少分钟+多少秒+多少小数秒:

SQL> select t2-t1 from test;

+000000000 00:10:00.100000

+000000001 00:10:00.100000

+000000001 01:30:10.100000

SQL>

但要简单地转化为某一个精度却比较麻烦,用类似date类型的处理方法是不行的。如转化为分:

SQL> select 1440*(t2-t1) from test;

+000000010 00:02:24.000000000

+000001450 00:02:24.000000000

+000001530 04:02:24.000000000

SQL>

发现结果根本不是原先想要的,而是在原先的“多少天+多少小时+多少分钟+多少秒+多少小数秒”的每一项都乘以1440再进行进制处理。

最容易理解的就是用substr将两个timestamp的差进行分割转化处理:

SQL>  SELECT substr((t2-t1),instr((t2-t1),'

')+7,2)         seconds,

2      substr((t2-t1),instr((t2-t1),' ')+4,2)

minutes,

3     substr((t2-t1),instr((t2-t1),' ')+1,2)         hours,

4     trunc(to_number(substr((t2-t1),1,instr(t2-t1,' '))))

days,

5     trunc(to_number(substr((t2-t1),1,instr(t2-t1,' ')))/7)

weeks

6 FROM test;

SECO MINU HOUR DAYS WEEKS

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

00 10 00 0 0

00 10 00 1 0

10 30 01 1 0

或者利用自定义函数来实现将天数转换成“天时分秒”格式:

CREATE OR REPLACE FUNCTION F_DAYS2STR(P_DAYS IN NUMBER

DEFAULT 0)

RETURN VARCHAR2 IS--Ver:1.0--Created by xsb on 2005-05-26--For: 将天数转换成天时分秒格式DAYS NUMBER := NVL(P_DAYS, 0);

VD NUMBER; --天VH NUMBER; --小时VM NUMBER; --分VS NUMBER; --秒RESULT VARCHAR2(100); --返回值BEGIN

VD := TRUNC(DAYS);

VH := TRUNC((DAYS - VD) * 24);

VM := TRUNC((DAYS - VD - VH / 24) * 24 * 60);

VS := TRUNC((DAYS - VD - VH / 24 - VM / 24 / 60) * 24 * 60 * 60);

SELECT DECODE(VD, 0, '', VD

|| '天') || DECODE(VH, 0, '', VH || '小时') ||DECODE(VM, 0, '', VM || '分') || DECODE(VS, 0, '', VS || '秒') INTO RESULT FROM DUAL;

RETURN(RESULT);

END;

SQL>

如果最后结果的精度要求不高时(在分或分以上时),就可以先将timestamp转化为date再结算,这样就简单多了:

SQL> select (to_date(to_char(t2,'yyyy-mm-dd

hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'

)-to_date(to_char(t1,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd

hh24:mi:ss'))*24*60

2 from test;

10

1450

1530.16667

date转换为timestamp:

SELECT

CAST(sysdate AS

TIMESTAMP) from dual;

二、自己验证的

1、执行SELECT

CAST(sysdate AS

TIMESTAMP) from dual;

2、如的到现在的时间为“24-11月-08

10.57.49.000000 下午”

3、以前的DB2字段中TIMESTAMP(6)时间格式为“2005-11-23

13:13:01.000003”,现转到Oracle10g应为“24-11月-08 10.57.49.000000

下午”

oracle timestamp 设置默认值,oracle的timestamp类型使用 毫秒相关推荐

  1. mysql timestamp 默认_MySQL数据库TIMESTAMP怎么设置默认值 | 学步园

    MySQL数据库TIMESTAMP设置默认值新手技术人员对他感到很陌生,不知道该怎么设置.下面学步园小编来讲解下MySQL数据库TIMESTAMP怎么设置默认值? MySQL数据库TIMESTAMP怎 ...

  2. jpa mysql timestamp_Java JPA设置默认值、Timestamp设置、自动获取时间

    设置默认值 @Column(name="state",columnDefinition="tinyint default 0") private Integer ...

  3. [vue] prop是怎么做验证的?可以设置默认值吗?

    [vue] prop是怎么做验证的?可以设置默认值吗? 单个类型就用Number等基础类型,多个类型用数组,必填的话设置require为true,默认值的话设置default,对象和数组设置默认用工厂 ...

  4. 【环境配置】MySQL timestamp的默认值设置问题

    环境: MacBook Pro 15 jdk8 MySQL:5.7.22 问题: mysql 5.7 以上版本,增加了2条严格的时间格式的限制(NO_ZERO_IN_DATE,NO_ZERO_DATE ...

  5. MySQL 里 timestamp 的默认值设置

    MySQL里timestamp的默认值设置 timestamp 有以下几种默认值设置: 1.timestamp :表示该字段在插入和更新时都不会自动设置为当前时间. 2.timestamp defau ...

  6. 添加列oracle默认值,Oracle 11g增加列,并带默认值的新特性

    在Oracle 11g以前,如果要在一个大表中增加一列,并设置默认值,那将是一个非常悲剧的事情.有些时候不得不选择在线重定义功能来实现 Oracle 11g增加列,并带默认值的新特性 [日期:2014 ...

  7. ORACLE ---注释,默认值,同义词

    ORACLE -注释,默认值,同义词 注释 对表本身或表中的每个字段添加一段解释说明,使得初次接触该表的开发人员能尽快了解该表. 体现: 1.表结构描述中 2.查询结果某行数据纵向展示时 创建注释: ...

  8. 数据库-Oracle【Oracle数据库设置默认表空间问题及Oracle,SQL,MySQL的自增变量设置】...

    一. Oracle数据库设置默认表空间问题 DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间-- ...

  9. ajax默认什么方法,ajax设置默认值ajaxSetup()方法

    $(function(){ //设置全局 jQuery Ajax全局参数 $.ajaxSetup({ type:"POST", async:false, cache:false, ...

最新文章

  1. Oracle HowTo:如何使用Oracle case函数
  2. 对象分割--Instance-sensitive Fully Convolutional Networks
  3. Python学习(13)函数
  4. CTFshow 命令执行 web47
  5. 好色派:日省 6 小时,神策分析是我的“菜”
  6. 久违的反省,容忍现在的自己
  7. c vector用法是什么
  8. 【概念集锦】之 shim和polyfill
  9. GitHub练习——如何将本地已有项目添加到github
  10. 用信号量实现进程互斥示例和解决哲学家就餐问题
  11. 稳扎稳打 Silverlight 4.0 教程
  12. Java实现生成32位UUID工具类
  13. Ultra Edit中编辑并一键运行Ansys命令流
  14. linux运维阿铭,阿铭Linux
  15. 如何把应用程序和资料转移到新的硬盘?
  16. 电大计算机C语言1253,1253《C语言程序设计》电大期末精彩试题及其问题详解
  17. 算法设计:2.向下取整、向上取整符号
  18. Bootstrap 超大屏幕(Jumbotron)
  19. 怎么让一天有36小时
  20. 乱七八糟记一下乱七八糟的碎片化知识

热门文章

  1. 微信小程序框架(四)-全面详解(学习总结---从入门到深化)
  2. 用django开发一个报修系统
  3. 个人养老金制度内容分析解读
  4. http协议服务器ppt,传智播客内部资料HTTP协议.ppt
  5. 报名老刘的LinuxProbe,获取《Linux就该这么学》
  6. python爬虫完整代码下载页
  7. 物联网-云平台可靠性设计
  8. 对云计算,大数据和人工智能的浅谈(三)
  9. 【Markdown 1】什么是Markdown?怎么用? - Markdown语法个人简述总结(图文)(常用)
  10. 【面试总结】面试前不得不刷一下的硬核总结。