2008-12-04 34 views
16

Tôi cần thêm một số khoảng thời gian và sử dụng kết quả trong Excel.Cách chuyển đổi khoảng thời gian như "1 ngày 01:30:00" thành "25:30:00"?

Kể từ

sum(time.endtime-time.starttime) 

trả về khoảng thời gian như "1 ngày 01:30:00" và định dạng này phá vỡ tấm Excel của tôi, tôi nghĩ rằng nó sẽ được tốt đẹp để có đầu ra như "25:30: 00 "nhưng không tìm thấy cách nào để làm điều đó trong tài liệu PostgreSQL.

Có ai ở đây có thể giúp tôi không?

Trả lời

14

vì không có một giải pháp chính xác cho topic:

=> SELECT date_part('epoch', INTERVAL '1 day 01:30:00') * INTERVAL '1 second' hours; 
    hours 
----------- 
25:30:00 
(1 row) 

Nguồn: Documentation

+0

Tuyệt vời! Giải pháp lý tưởng. –

21

Điều duy nhất tôi có thể đi kèm với (bên cạnh phân tích số ngày và thêm 24 đến giờ mỗi lần) là:

mat=> select date_part('epoch', '01 day 1:30:00'::interval); 
date_part 
----------- 
    91800 
(1 row) 

Nó sẽ cho bạn số giây, có thể là ok cho excel.

+0

Great stuff.Tôi cần một số cách để lấy một tuyệt đối từ một khoảng thời gian và bước đầu tiên tôi cần là 'đúc' khoảng thời gian để giây và điều này chỉ làm các trick :) 'SELECT * FROM bảng ORDER BY abs (date_part ('epoch', ('2011-07-19 02:40:05' - table.time))) ' – Boro

18

Bạn có thể sử dụng EXTRACT để chuyển đổi khoảng thời gian thành giây.

SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); 
Result: 442800 

Sau đó, bạn sẽ cần thực hiện các phép toán của riêng bạn (hoặc để Excel làm việc đó).

Lưu ý rằng '1 ngày' không nhất thiết phải tương đương với '24 giờ '- PostgreSQL xử lý những thứ như khoảng thời gian kéo dài quá trình chuyển đổi DST.

+1

Trong một (timestamp | date | time) với múi giờ, có, nhưng, hum, một khoảng thời gian không có khái niệm về thời điểm nó đang diễn ra , vì vậy, nó không có chuyển đổi DST hoặc giây nhảy vọt. – mat

+0

osm => chọn '2008-03-29T02: 00: 05 + 0200' :: timestamptz + '1 ngày' :: khoảng thời gian; ? Cột? ------------------------ 2008-03-30 01: 00: 05 + 01 (1 hàng) – mat

+3

Tôi không thể có thẩm quyền về vấn đề này, nhưng có vẻ như Postgres lưu trữ khoảng thời gian như một tập hợp các trường, không chỉ là một số nguyên được chuyển đổi để hiển thị. Nó sẽ được hiểu là một số giây khác nhau tùy thuộc vào nơi nó được áp dụng. Củng cố nó trong bối cảnh có nghĩa là nó phải đưa ra các giả định. – slim

0

Trong SQL chuẩn, bạn muốn thể hiện loại là INTERVAL HOUR TO SECOND, nhưng bạn có giá trị loại INTERVAL DAY TO SECOND. Bạn không thể sử dụng CAST để có được kết quả bạn yêu cầu? Trong Informix, ký hiệu sẽ là một trong hai:

SUM(time.endtime - time.starttime)::INTERVAL HOUR(3) TO SECOND 

CAST(SUM(time.endtime - time.starttime) AS INTERVAL HOUR(3) TO SECOND) 

Trước đây, AFAIK, ký hiệu đặc thù Informix (hoặc, ít nhất, không chuẩn); thứ hai là, tôi tin rằng, ký hiệu chuẩn SQL.

0

Nó có thể được thực hiện, nhưng tôi tin rằng cách duy nhất là thông qua con quái vật sau (giả sử tên khoảng cột thời gian của bạn là "ti"):

select 
       to_char(floor(extract(epoch from ti)/3600),'FM00') 
    || ':' || to_char(floor(cast(extract(epoch from ti) as integer) % 3600/60), 'FM00') 
    || ':' || to_char(cast(extract(epoch from ti) as integer) % 60,'FM00') 
    as hourstamp 
from whatever; 

Thấy không? Tôi đã nói với bạn nó thật kinh khủng :)

Nó sẽ được tốt đẹp để nghĩ rằng

select to_char(ti,'HH24:MI:SS') as hourstamp from t 

sẽ làm việc, nhưng than ôi, định dạng HH24 không "hấp thụ" tràn ngoài 24. Trên đây đi (được xây dựng lại từ bộ nhớ) từ một số mã tôi từng viết. Để tránh vi phạm các hiến pháp tinh vi, tôi đã đóng gói các tội phạm trên trong một chế độ xem ...

11

Nếu bạn muốn postgres xử lý HH: MM: SS định dạng cho bạn, lấy sự khác biệt trong giây và chuyển nó sang khoảng thời gian quy mô trong vài giây:

SELECT SUM(EXTRACT(EPOCH FROM time.endtime) - EXTRACT(EPOCH FROM time.starttime)) 
     * INTERVAL '1 SECOND' AS hhmmss 
+2

Rất tinh tế. Điều này thay đổi khoảng thời gian từ ngày, giờ, phút, giây thành giây, sau đó bạn chỉ có thể thực hiện 'to_char (xxx, 'HH24: MI: SS')'. – sayap

+0

+1 Nên là câu trả lời ... thêm nó vào tờ nz cheat của tôi –

Các vấn đề liên quan