`
davice_li
  • 浏览: 93831 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle timestamp(6)运用

阅读更多

我们都知道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;

分享到:
评论

相关推荐

    oracle日期时间型timestamp的深入理解

    Oracle数据库中的日期时间型数据类型`timestamp`是一个非常重要的概念,它用于存储精确到纳秒的时间戳信息。本文将深入探讨`timestamp`的使用、转换以及与其他日期时间类型交互的方法。 1. **字符型转成timestamp**...

    oracle 通过快照进行数据恢复

    ### Oracle通过快照进行数据恢复 #### 一、引言 ...当然,除了快照之外,Oracle还提供了其他数据恢复机制,如备份与恢复、闪回技术等,这些工具和技术的综合运用将进一步提高数据的安全性和可靠性。

    java、mysql以及oracle数据类型对照表

    MySQL的数据类型包括数值类型(如INT、DECIMAL)、字符串类型(如VARCHAR、TEXT)、日期和时间类型(如DATE、TIMESTAMP)以及二进制类型(如BLOB、VARBINARY)。在Oracle中,我们有类似的数据类型,如NUMBER、...

    面试复习题--oracle.pdf

    Oracle数据库在IT行业中是...理解并熟练运用这些Oracle数据库的核心概念和技术,是成为一名合格的Oracle数据库管理员或开发者的基础。在面试中,对这些知识点的深入理解和实践案例分享,往往能体现出候选人的专业水平。

    oracle,mysql表格转换mybatis相关文件

    例如,Oracle和MySQL的日期时间类型可能需要转换为Java的Date或Timestamp对象。MyBatis使用#{param}来绑定参数,而结果集映射(ResultMap)则用于将数据库查询结果转换为Java对象。 接下来,我们讨论MyBatis的动态...

    (原)mssql数据迁移到oracle

    2. 数据类型映射:SQL Server和Oracle的数据类型并不完全相同,比如,SQL Server的`datetime`在Oracle中可能是`DATE`或`TIMESTAMP`,需要进行相应的转换。 3. 工具选择:迁移过程中,可以使用多种工具,如SQL ...

    Oracle技术参考资料

    4. **Oracle数据类型**:Oracle数据库支持多种数据类型,包括数值型(如NUMBER、INTEGER)、字符串型(如VARCHAR2、CHAR)、日期时间型(如DATE、TIMESTAMP)、二进制数据(如BLOB、CLOB)等。了解并熟练运用这些...

    oracle 110个常用函数.zip

    Oracle数据库是世界上最流行的数据库管理系统之一,它...在学习过程中,理解每个函数的作用、参数及返回值类型是关键,同时通过实践来加深理解,结合具体的业务场景灵活运用,才能真正发挥出Oracle数据库的强大功能。

    oracle命令整理.7z

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其强大的功能和灵活性使得它在企业级应用中占据了重要地位。...在实际工作中,理解和熟练运用这些命令,将极大地提升数据管理的灵活性和安全性。

    oracle数据库ppt中科院培训专用Lescn4PPT优秀资料.ppt

    Oracle数据库在处理日期和时间数据时提供了丰富的函数和特性,特别...理解并熟练运用这些日期时间函数对于管理和查询Oracle数据库中的日期和时间数据至关重要,尤其是在全球化的业务环境中,正确处理时区差异至关重要。

    oracle时间time转换器

    Oracle数据库系统是世界上最广泛...在实际应用中,了解并熟练运用这些时间转换器对于开发和维护Oracle数据库系统的应用程序至关重要。通过这些工具,我们可以灵活地处理时间数据,满足各种报告、分析和数据交互的需求。

    Oracle计算时间差为毫秒的实现代码

    在Oracle数据库中,计算时间差通常涉及到日期和时间...总之,计算Oracle中的毫秒时间差涉及到了对日期和时间类型的理解,以及对字符串操作和数值计算的运用。在实际应用中,应根据数据库版本和性能需求选择合适的方法。

    oracle database 11g sql 开发指南 书中脚本

    Oracle Database 11g SQL开发指南是一本专为SQL初学者和有经验的数据库管理员设计的书籍,旨在帮助读者深入理解和熟练运用Oracle数据库系统中的SQL语言。这本书包含了大量的实例脚本,供读者实践和学习。以下是一些...

    java调用oracle存储过程

    在Java编程中,调用Oracle数据库的存储过程是一项常见的任务,尤其在处理复杂业务逻辑或数据操作时。本文将深入探讨如何使用Java...通过合理运用这些技术,开发者可以高效地在Java应用中集成和利用Oracle数据库的功能。

    oracle处理的类型 oracle行排序

    在Oracle数据库中,处理数据类型和行排序是两个非常关键的操作。Oracle支持多种数据类型,这些数据类型用于存储各种类型的信息,如数字...理解并熟练运用这些概念对于任何Oracle数据库管理员或开发人员都是至关重要的。

    oracle 内置函数

    理解并熟练运用Oracle的内置函数是每个数据库管理员和开发者必备的技能之一。 在学习和应用这些函数时,一定要注意函数的参数类型、返回值类型以及可能产生的异常情况。同时,Oracle数据库还支持自定义函数,以满足...

    00575 Oracle公司内部数据库培训资料-Les16_Oracle9i 日期函数(PPT 17页).ppt

    Oracle 9i在日期支持方面引入了新的数据类型,如`TIMESTAMP`,`TIMESTAMP WITH TIME ZONE (TSTZ)` 和 `TIMESTAMP WITH LOCAL TIME ZONE (TSLTZ)`。这些数据类型允许存储带有时区信息的日期和时间,增加了处理全球化...

    oracle时间函数

    Oracle时间函数是数据库管理中非常关键的一部分,特别是在处理与日期和时间相关的数据时。...通过灵活运用这些函数,我们可以轻松地处理和解析Oracle数据库中的日期和时间数据,从而实现更高效的数据管理和分析。

    Oracle110个常用函数……PDF清晰版

    根据提供的文件标题、描述以及部分内文,我们可以推断出这份文档主要介绍的是Oracle数据库中的110个常用函数。由于提供的部分内容似乎并不是标准的文本格式,并且...在实际使用过程中,还需要不断积累经验并灵活运用。

    Oracle2基础2.ppt

    在日期和时间数据类型方面,Oracle提供了Date、TIMESTAMP以及INTERVAL类型。Date类型用于存储日期和时间值,TIMESTAMP则进一步包含了小时、分钟和秒的信息。INTERVAL分为YEAR TO MONTH和DAY TO SECOND两种,分别用于...

Global site tag (gtag.js) - Google Analytics