Oracle current_timestamp到秒转换

时间:2011-05-04 09:21:55

标签: oracle

我们正在使用Oracle数据库。

在我们的表中,时间戳存储为自1970年以来的秒数,如何将通过current_timestamp()函数获得的时间戳转换为秒

4 个答案:

答案 0 :(得分:22)

这样就可以了:

select (cast(current_timestamp as date) - date '1970-01-01')*24*60*60 from dual

虽然如果我只对秒感兴趣,我不会使用current_timestamp,我会使用SYSDATE:

select (SYSDATE - date '1970-01-01')*24*60*60 from dual

答案 1 :(得分:0)

不太可爱solution但可能有一些优点。

答案 2 :(得分:0)

可能不完全相关。我不得不解决其他问题(例如Oracle在V $ RMAN_STATUS和V $ RMAN_OUTPUT中存储时间戳),我不得不将其转换为日期/时间戳。我很惊讶,但魔术日期不是1970-01-01那里,而是1987-07-07。我查看了Oracle的历史,我能想到的最接近的日期是将Oracle产品移植到UNIX。这是对的吗?

这是我的SQL

SELECT /*+ rule */
         to_char(min(stamp)/(24*60*60) + date '1987-07-07', 'DD-MON-YYYY HH24:MI:SS') start_tm
       , to_char(to_char(max(stamp)/(24*60*60) + date '1987-07-07', 'DD-MON HH24:MI:SS')) end_tm
FROM V$RMAN_STATUS 
START WITH (RECID, STAMP) =
     (SELECT MAX(session_recid),MAX(session_stamp) FROM V$RMAN_OUTPUT) 
CONNECT BY PRIOR RECID = parent_recid ;

答案 3 :(得分:0)

我需要通过时间戳从Oracle DB将时间戳发送给GrayLog。我尝试了不同的版本和解决方案,但只有一个可以正常工作。

SQL:

SELECT REPLACE((CAST(dat AS DATE) - TO_DATE('19700101', 'YYYYMMDD')) * 86400 + MOD(EXTRACT(SECOND FROM dat), 1), ',', '.') AS millis
FROM (SELECT SYSTIMESTAMP AT TIME ZONE 'GMT' AS dat FROM dual)

Systmiestamp的结果

  

2018/12/18 19:47:29,080988 +02:00

将是

1545155249.080988