いくつかの間隔を追加して、Excelで結果を使用する必要があります。
以来
sum(time.endtime-time.starttime)
間隔を「1日01:30:00」として返し、この形式ではExcelシートが壊れます。「25:30:00」のような出力があればいいと思いましたが、PostgreSQLでそれを行う方法が見つかりませんでしたドキュメンテーション。
ここの誰かが私を助けることができますか?
トピックの正確な解決策がないため:
=> SELECT date_part('Epoch', INTERVAL '1 day 01:30:00') * INTERVAL '1 second' hours;
hours
-----------
25:30:00
(1 row)
ソース: ドキュメント
私が持って来ることができる唯一のもの(日数を解析し、毎回時間に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
それは可能ですが、唯一の方法は次の怪物を経由することだと思います(時間間隔の列名が "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を超えるオーバーフローを「吸収」しません。上記は(メモリから再構築された)私がかつて書いたコードからのものです。デリケートな体質の人を怒らせないように、私は上記のシェナニガンをビューにカプセル化しました...
標準SQLでは、タイプをINTERVAL HOUR TO SECONDとして表したいが、タイプINTERVAL DAY TOSECONDの値があります。 CASTを使用して必要な結果を得ることができませんか? Informixでは、表記は次のいずれかになります。
SUM(time.endtime - time.starttime)::INTERVAL HOUR(3) TO SECOND
CAST(SUM(time.endtime - time.starttime) AS INTERVAL HOUR(3) TO SECOND)
前者は、AFAIK、Informix固有の表記法(または、少なくとも標準ではありません)です。後者は、SQL標準表記だと思います。