Converta a época até o momento em sqlplus / oracle
Pergunta
Eu tenho a tabela a seguir:
SQL> desc recording
Name Null? Type
-------------------- -------- ------
CAPTUREID NOT NULL NUMBER(9)
STARTDATE NOT NULL DATE
ENDDATE DATE
STATE NUMBER(1)
ESTIMATEDENDTIME NUMBER(13)
Aqui está uma única linha para esta tabela:
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
Tenho certeza de que isso já foi perguntado tantas vezes antes, mas todas as soluções que encontrei até agora não funcionaram, então ... como faço para converter ESTIMATEDENDTIME
de sua forma de época original para um DD/MM/YYY HH:MI:SS
formato em uma única consulta no sqlplus?
Obrigado!
Solução
No Oracle, adicionar x a uma data devolverá uma data x dias depois.
Se o tempo estimado for milissegundos desde a época, você pode fazer
DATE '1970-01-01' + ( 1 / 24 / 60 / 60 / 1000) * ESTIMATEDENDTIME
e depois use para_char para obter o formato correto da data resultante. por exemplo:
SELECT
captureid
, startdate
, enddate
, state
, estimatedendtime
, DATE '1970-01-01' + ( 1 / 24 / 60 / 60 / 1000) * estimatedendtime AS estimatedenddate
FROM recording
Outras dicas
select ((timestamp_coloum_name - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400)) from any_table;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow