2010-09-29 4 views
12

У меня есть следующая таблица:Преобразовать эпохи до настоящего времени в SQLPLUS/Oracle

SQL> desc recording 
Name     Null? Type 
-------------------- -------- ------ 
CAPTUREID   NOT NULL NUMBER(9) 
STARTDATE   NOT NULL DATE 
ENDDATE      DATE 
STATE       NUMBER(1) 
ESTIMATEDENDTIME    NUMBER(13) 

Вот одна строка для этой таблицы:

SQL> select * from recording where CAPTUREID=14760457; 

CAPTUREID STARTDATE   ENDDATE    STATE ESTIMATEDENDTIME 
---------- ------------------- ------------------- ----- ---------------- 
    14760457 29/09/2010 08:50:01 29/09/2010 09:52:04  0 1285746720000 

Я уверен, что это было предложено так много раз, но все решения, которые я нашел до сих пор, действительно не работают, поэтому ... Как мне преобразовать ESTIMATEDENDTIME из его первоначальной формы в формат DD/MM/YYY HH:MI:SS в одном запросе в SQLPLUS?

Спасибо!

ответ

25

В Oracle, добавив X к DATE, вы получите DATE X дней спустя.

Если ESTIMATEDENDTIME это миллисекунды, так Эпохи, то вы могли бы сделать

DATE '1970-01-01' + (1/24/60/60/1000) * ESTIMATEDENDTIME 

, а затем использовать to_char для достижения правильного формата полученной даты. например:

SELECT 
    captureid 
, startdate 
, enddate 
, state 
, estimatedendtime 
, DATE '1970-01-01' + (1/24/60/60/1000) * estimatedendtime AS estimatedenddate 
FROM recording 
+0

Черт! Это быстрее и проще, чем другие решения, которые я пытался! БЛАГОДАРЯ! – Oink

0
select ((timestamp_coloum_name - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400)) from any_table; 

 Смежные вопросы

  • Нет связанных вопросов^_^