所以我试图将时间戳传送到秒。
我读到你可以这样做
to_char(to_date(10000,'sssss'),'hh24:mi:ss')
但事实证明你不能超过86399秒。
这是我的日期格式:+000000000 00:00:00.000000
将此转换为秒的最佳方法是什么? (这是减去两个日期以找出差异的结果。)
答案 0 :(得分:3)
您可以通过添加一个数字(在我们的例子中为零)将时间戳转换为日期。 Oracle将该类型从时间戳降级到日期
例如:
select systimestamp+0 as sysdate_ from dual
和2时间戳之间的差异:
SQL> select 24*60*60*
((SYSTIMESTAMP+0)
-(TO_TIMESTAMP('16-MAY-1414:10:10.123000','DD-MON-RRHH24:MI:SS.FF')+0)
)
diff_ss from dual;
DIFF_SS
----------
15140
答案 1 :(得分:2)
您似乎正在尝试查找interval
中的总秒数(这是您减去两个timestamps
时返回的数据类型)。要将interval
转换为秒,您需要extract
每个组件并将其转换为秒。这是一个例子:
SELECT interval_value,
(EXTRACT (DAY FROM interval_value) * 24 * 60 * 60)
+ (EXTRACT (HOUR FROM interval_value) * 60 * 60)
+ (EXTRACT (MINUTE FROM interval_value) * 60)
+ EXTRACT (SECOND FROM interval_value)
AS interval_in_sec
FROM (SELECT SYSTIMESTAMP - TRUNC (SYSTIMESTAMP - 1) AS interval_value
FROM DUAL)
答案 2 :(得分:0)
如果您想要两个日期(或时间戳)之间的秒数,
select floor(
(to_date(to_char(timestamp1, 'yyyy-mm-dd HH24:MI:ss'),'yyyy-mm-dd HH24:MI:ss')
- to_date(to_char(timestamp2, 'yyyy-mm-dd HH24:MI:ss'),'yyyy-mm-dd HH24:MI:ss')
)
* 24 -- hours per day
* 60 -- minutes per hour
* 60 -- seconds per minute
)
etc