2010-09-29 33 views
12

J'ai le tableau suivant:Convertir époque à ce jour dans 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) 

Voici une seule ligne pour ce tableau:

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 

Je suis sûr que cela a été demandé si plusieurs fois avant, mais toutes les solutions que j'ai trouvées jusqu'ici n'ont pas vraiment fonctionné, ainsi ... Comment je convertis ESTIMATEDENDTIME de sa forme d'époque originale en format DD/MM/YYY HH:MI:SS dans une seule requête dans SQLPLUS?

Merci!

Répondre

25

Dans Oracle, l'ajout de X à une date vous renvoie X DATE X plus tard.

Si ESTIMATEDENDTIME est millisecondes depuis l'époque vous pourriez faire

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

et ensuite utiliser to_char pour obtenir le bon format de la date résultant. par exemple:

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

Bon sang! C'est plus rapide et plus facile que d'autres solutions que j'essayais! MERCI! – Oink

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