2010-09-29 15 views
12

Ho la seguente tabella:Convertire epoca fino ad oggi in 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) 

Ecco una singola linea per questa tabella:

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 

Sono abbastanza sicuro che questo è stato chiesto in modo molte volte prima, ma tutte le soluzioni che ho trovato finora non funzionavano davvero, quindi ... Come posso convertire ESTIMATEDENDTIME dalla sua forma originale in un formato DD/MM/YYY HH:MI:SS in una singola query in SQLPLUS?

Grazie!

risposta

25

In Oracle, l'aggiunta di X a un giorno DATE ti restituirà una DATA X giorni dopo.

Se ESTIMATEDENDTIME è millisecondi dall'Epoca allora si potrebbe fare

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

e quindi utilizzare TO_CHAR per ottenere il corretto formato della data risultante. per esempio:

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

Dannazione! È più veloce e più facile delle altre soluzioni che stavo provando! GRAZIE! – Oink

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