我们都知道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`是一个非常重要的概念,它用于存储精确到纳秒的时间戳信息。本文将深入探讨`timestamp`的使用、转换以及与其他日期时间类型交互的方法。 1. **字符型转成timestamp**...
### Oracle通过快照进行数据恢复 #### 一、引言 ...当然,除了快照之外,Oracle还提供了其他数据恢复机制,如备份与恢复、闪回技术等,这些工具和技术的综合运用将进一步提高数据的安全性和可靠性。
MySQL的数据类型包括数值类型(如INT、DECIMAL)、字符串类型(如VARCHAR、TEXT)、日期和时间类型(如DATE、TIMESTAMP)以及二进制类型(如BLOB、VARBINARY)。在Oracle中,我们有类似的数据类型,如NUMBER、...
Oracle数据库在IT行业中是...理解并熟练运用这些Oracle数据库的核心概念和技术,是成为一名合格的Oracle数据库管理员或开发者的基础。在面试中,对这些知识点的深入理解和实践案例分享,往往能体现出候选人的专业水平。
例如,Oracle和MySQL的日期时间类型可能需要转换为Java的Date或Timestamp对象。MyBatis使用#{param}来绑定参数,而结果集映射(ResultMap)则用于将数据库查询结果转换为Java对象。 接下来,我们讨论MyBatis的动态...
2. 数据类型映射:SQL Server和Oracle的数据类型并不完全相同,比如,SQL Server的`datetime`在Oracle中可能是`DATE`或`TIMESTAMP`,需要进行相应的转换。 3. 工具选择:迁移过程中,可以使用多种工具,如SQL ...
4. **Oracle数据类型**:Oracle数据库支持多种数据类型,包括数值型(如NUMBER、INTEGER)、字符串型(如VARCHAR2、CHAR)、日期时间型(如DATE、TIMESTAMP)、二进制数据(如BLOB、CLOB)等。了解并熟练运用这些...
Oracle数据库是世界上最流行的数据库管理系统之一,它...在学习过程中,理解每个函数的作用、参数及返回值类型是关键,同时通过实践来加深理解,结合具体的业务场景灵活运用,才能真正发挥出Oracle数据库的强大功能。
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其强大的功能和灵活性使得它在企业级应用中占据了重要地位。...在实际工作中,理解和熟练运用这些命令,将极大地提升数据管理的灵活性和安全性。
Oracle数据库在处理日期和时间数据时提供了丰富的函数和特性,特别...理解并熟练运用这些日期时间函数对于管理和查询Oracle数据库中的日期和时间数据至关重要,尤其是在全球化的业务环境中,正确处理时区差异至关重要。
Oracle数据库系统是世界上最广泛...在实际应用中,了解并熟练运用这些时间转换器对于开发和维护Oracle数据库系统的应用程序至关重要。通过这些工具,我们可以灵活地处理时间数据,满足各种报告、分析和数据交互的需求。
在Oracle数据库中,计算时间差通常涉及到日期和时间...总之,计算Oracle中的毫秒时间差涉及到了对日期和时间类型的理解,以及对字符串操作和数值计算的运用。在实际应用中,应根据数据库版本和性能需求选择合适的方法。
Oracle Database 11g SQL开发指南是一本专为SQL初学者和有经验的数据库管理员设计的书籍,旨在帮助读者深入理解和熟练运用Oracle数据库系统中的SQL语言。这本书包含了大量的实例脚本,供读者实践和学习。以下是一些...
在Java编程中,调用Oracle数据库的存储过程是一项常见的任务,尤其在处理复杂业务逻辑或数据操作时。本文将深入探讨如何使用Java...通过合理运用这些技术,开发者可以高效地在Java应用中集成和利用Oracle数据库的功能。
在Oracle数据库中,处理数据类型和行排序是两个非常关键的操作。Oracle支持多种数据类型,这些数据类型用于存储各种类型的信息,如数字...理解并熟练运用这些概念对于任何Oracle数据库管理员或开发人员都是至关重要的。
理解并熟练运用Oracle的内置函数是每个数据库管理员和开发者必备的技能之一。 在学习和应用这些函数时,一定要注意函数的参数类型、返回值类型以及可能产生的异常情况。同时,Oracle数据库还支持自定义函数,以满足...
Oracle 9i在日期支持方面引入了新的数据类型,如`TIMESTAMP`,`TIMESTAMP WITH TIME ZONE (TSTZ)` 和 `TIMESTAMP WITH LOCAL TIME ZONE (TSLTZ)`。这些数据类型允许存储带有时区信息的日期和时间,增加了处理全球化...
Oracle时间函数是数据库管理中非常关键的一部分,特别是在处理与日期和时间相关的数据时。...通过灵活运用这些函数,我们可以轻松地处理和解析Oracle数据库中的日期和时间数据,从而实现更高效的数据管理和分析。
根据提供的文件标题、描述以及部分内文,我们可以推断出这份文档主要介绍的是Oracle数据库中的110个常用函数。由于提供的部分内容似乎并不是标准的文本格式,并且...在实际使用过程中,还需要不断积累经验并灵活运用。
在日期和时间数据类型方面,Oracle提供了Date、TIMESTAMP以及INTERVAL类型。Date类型用于存储日期和时间值,TIMESTAMP则进一步包含了小时、分钟和秒的信息。INTERVAL分为YEAR TO MONTH和DAY TO SECOND两种,分别用于...