我需要以给定的格式减去2个时间戳:
16/01/17 07:01:06,165000000
16/01/17 07:01:06,244000000
我想用2个十进制值表示结果,但是在CAST过程中的某个地方,我正在失去精度。我现在的尝试是这样的:
select
id,
trunc((CAST(MAX(T.TIMESTAMP) AS DATE) - CAST(MIN(T.TIMESTAMP) AS DATE))*24*60*60,2) as result
from table T
group by id;
但即使我将截断小数设置为2,我得到id_1 '0'
作为上述两个时间戳的结果。
有没有办法可以获得0.XX aa减法的结果?
答案 0 :(得分:3)
这是因为你要将时间戳投射到目前为止。
使用to_timestamp
将字符串转换为时间戳。
试试这个:
with your_table(tstamp) as (
select '16/01/17 07:01:06,165000000' from dual union all
select '16/01/17 07:01:06,244000000' from dual
),
your_table_casted as (
select to_timestamp(tstamp,'dd/mm/yy hh24:mi:ss,ff') tstamp from your_table
)
select trunc(sysdate + (max(tstamp) - min(tstamp)) * 86400 - sysdate, 2) diff
from your_table_casted;
两个时间戳之间的差异为INTERVAL DAY TO SECOND
。
要将其转换为秒,请使用上述技巧。
答案 1 :(得分:0)
DATE-此数据类型存储日期和时间,解析为秒。它不包括时区。 DATE是用于在Oracle应用程序中处理日期的最早且最常用的数据类型。
TIMESTAMP-时间戳类似于日期,但有两个关键区别:您可以存储和操作已解决的时间到最接近的十亿分之一秒(精确度为9位小数),并且您可以将时区与时间戳,Oracle数据库将在操作时间戳时考虑该时区。
减去两个时间戳的结果是INTERVAL:
INTERVAL - DATE和TIMESTAMP记录特定时间点,INTERVAL记录并计算持续时间。您可以按年和月,或天和秒指定间隔。
您可以找到更多信息here