我们都知道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与DATE比较
oracle timestamp详解 将常用的转换方法及使用注意事项都罗列出来了
NULL 博文链接:https://bchen.iteye.com/blog/1632845
oracle --timestamporacle --timestamporacle --timestamporacle --timestamporacle --timestamporacle --timestamporacle --timestamporacle --timestamp
我们都知道date和timestamp都是对日期和时间的表示,只是两种类型的精确度不同,前者精确到秒,后者精确到小数秒(fractional_seconds_precision),可以是 0 to 9,缺省是6。这篇文章主要介绍了Oralce中TIMESTAMP的...
Oracle date 和 timestamp 区别详解 1.DATE数据类型 这个数据类型我们实在是太熟悉了,当我们需要表示日期和时间的话都会想到date类型。它可以存储月,年,日,世纪,时,分和秒。它典型地用来表示什么时候事情...
在Oracle 9i中,按照SQL 99标准,增加了时间间隔型数据INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND,它们和其他几种数据类型一起使得对时间的处理更加准确。TIMESTAMP、TIMESTAMP WITH TIME ZONE和TIMESTAMP ...
delphi与ORACLE数据库连接控件odac 安装说明 1.找到ODAC_5.70.0.30_FS\Source\Delphi7. 2.Make.bat右键编辑,填入delphi7安装路径. 3.然后运行Make.bat生成bpl文件. 注意: 在安装的时候会出现一个错误: [Fatal ...
oracle中日期类型与unix 时间戳的转换, Unix时间戳记是从'1970-01-01 00:00:00'GMT开始的秒数,表现为整数型。 Oracle中的时间是Date型,以下函数提供了两种时间转换的Oracle函数 --unix时间戳与date时间互转 ...
1、字符型转成timestamp 代码如下:select to_timestamp(’01-10月-08 07.46.41.000000000 上午’,’dd-MON-yy hh:mi:ss.ff AM’) from dual; 2、timestamp转成date型 代码如下: select cast(to_timestamp(’01-10...
名称:MILLISECONDS2TIMESTAMP 功能:将1970-01-01 00:00:00以来的毫秒数转换为对应的timestamp时间类型,精确保留毫秒级精度! 参数:I_MILLISECONDS NUMBER 待转换的毫秒数 示例:select MILLISECONDS2...
1主要针对连接oracle数据库代码 2解决[Err] ORA-01830: date format picture ends before converting entire input string报错问题代码,主要是将timestamp数据类型进行格式化成正常数据
本文将详细介绍oracle SCN跟TIMESTAMP之间转换,需要的朋友可以参考下
包括ARRAY, BFILE, DATE, INTERVALDS, NUMBER, STRUCT, TIME,TIMESTAMP,TIMESTAMP等。 ojdbc5.jar: 适用于jdk5 ojdbc6.jar: 适用于jdk6 ***_g.jar 只是用javac -g编译,生成所有调试信息,其它全一样 ...
主要介绍了MySQL 5.6 中的 TIMESTAMP 和 explicit_defaults_for_timestamp 参数,需要的朋友可以参考下
。。。
。。。
文章目录Timestamptimestamp.go如何使用 Timestamp path: google/protobuf/timestamp.proto 在 timestamppb 中 Timestamp 包含两个字段 seconds 表示秒 nanos 表示纳秒 message Timestamp { int64 seconds = 1; ...