いくつかの間隔を追加し、結果を Excel で使用する必要があります。
以来
sum(time.endtime-time.starttime)
間隔を「1日01:30:00」として返し、この形式は私のExcelシートを壊します。「25:30:00」のような出力があればいいと思いましたが、PostgreSQLでそれを行う方法が見つかりませんでしたドキュメンテーション。
ここで誰か助けてくれませんか?
いくつかの間隔を追加し、結果を Excel で使用する必要があります。
以来
sum(time.endtime-time.starttime)
間隔を「1日01:30:00」として返し、この形式は私のExcelシートを壊します。「25:30:00」のような出力があればいいと思いましたが、PostgreSQLでそれを行う方法が見つかりませんでしたドキュメンテーション。
ここで誰か助けてくれませんか?
私ができる唯一のことは(日数を解析し、毎回時間に24を追加する以外に)次のとおりです。
mat=> select date_part('epoch', '01 day 1:30:00'::interval);
date_part
-----------
91800
(1 row)
秒数が表示されますが、これは Excel では問題ありません。
EXTRACT
間隔を秒に変換するために使用できます。
SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours');
Result: 442800
次に、独自の計算を行う (または Excel に任せる) 必要があります。
「1 日」は必ずしも「24 時間」と同等ではないことに注意してください。PostgreSQL は、DST 移行にまたがる間隔などを処理します。
postgresにHH:MM:SSフォーマットを処理させたい場合は、エポック秒単位で差を取り、秒単位でスケーリングされた間隔に変換します。
SELECT SUM(EXTRACT(EPOCH FROM time.endtime) - EXTRACT(EPOCH FROM time.starttime))
* INTERVAL '1 SECOND' AS hhmmss
標準 SQL では、タイプを INTERVAL HOUR TO SECOND として表現したいのですが、タイプ INTERVAL DAY TO SECOND の値があります。必要な結果を得るために CAST を使用できませんか? Informix では、表記は次のいずれかになります。
SUM(time.endtime - time.starttime)::INTERVAL HOUR(3) TO SECOND
CAST(SUM(time.endtime - time.starttime) AS INTERVAL HOUR(3) TO SECOND)
前者は、私の知る限り、Informix固有の表記法です(または、少なくとも標準ではありません)。後者は、私が思うに、SQL 標準表記法です。
それは可能ですが、唯一の方法は次の怪物によるものだと思います(時間間隔の列名が「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;
見る?私はそれが恐ろしいことをあなたに言いました:)
そう思えばよかったのに
select to_char(ti,'HH24:MI:SS') as hourstamp from t
うまくいきますが、残念ながら、HH24 形式は 24 を超えるオーバーフローを「吸収」しません。上記は、私がかつて書いたコードから (メモリから再構築されたものです)。デリケートな体質の人の気分を害するのを避けるために、私は上記の悪ふざけをまとめました...