2010-09-29 33 views
12

Tôi có bảng sau:Chuyển đổi thời đại cho đến nay trong 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) 

Dưới đây là một dòng duy nhất cho bảng này:

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 

Tôi khá chắc chắn rằng điều này đã được yêu cầu để nhiều lần trước đây, nhưng tất cả các giải pháp tôi đã tìm thấy cho đến nay đã không thực sự làm việc, vì vậy ... Làm thế nào để chuyển đổi ESTIMATEDENDTIME từ dạng nguyên bản gốc sang định dạng DD/MM/YYY HH:MI:SS trong một truy vấn đơn trong SQLPLUS?

Cảm ơn!

Trả lời

25

Trong Oracle, việc thêm X vào DATE sẽ trả về bạn sau ngày X DATE.

Nếu ESTIMATEDENDTIME là mili giây kể từ Epoch sau đó bạn có thể làm

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

và sau đó sử dụng to_char để đạt được định dạng đúng của ngày kết quả. ví dụ:

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

Damn! Đó là nhanh hơn và dễ dàng hơn so với các giải pháp khác tôi đã cố gắng! CẢM ƠN! – Oink

0
select ((timestamp_coloum_name - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400)) from any_table; 
Các vấn đề liên quan