我们正在使用Oracle数据库。
在我们的表中,时间戳存储为自1970年以来的秒数,如何将通过current_timestamp()函数获得的时间戳转换为秒
答案 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