oracle的sql日期格式只有秒

时间:2014-05-16 15:45:00

标签: sql oracle

所以我试图将时间戳传送到秒。

我读到你可以这样做

to_char(to_date(10000,'sssss'),'hh24:mi:ss')

但事实证明你不能超过86399秒。

这是我的日期格式:+000000000 00:00:00.000000

将此转换为秒的最佳方法是什么? (这是减去两个日期以找出差异的结果。)

3 个答案:

答案 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