1

sec_to_time()MySQL には、秒数を hh:mm:ss に変換するクールな関数があります。

私はメーリングリストを読んで、基本的に以下を実装しようとしています:

MySQL:
select sec_to_time(sum(unix_timestamp(enddate) - unix_timestamp(startdate))) from foo;

PostgreSQL:
select XXX(sum(date_part('epoch',enddate) - date_part('epoch',startdate))) from foo;

XXX が何であるか/可能性があるかを知る必要があるだけです。文書化された機能の多くの組み合わせを試しました。

PostgreSQL でこれを行う方法を教えてください。

4

1 に答える 1

4

使用to_char:

regress=# SELECT to_char( (9999999 ||' seconds')::interval, 'HH24:MM:SS' );
  to_char   
------------
 2777:00:39
(1 row)

textフォーマットされた値を生成する関数は次のとおりです。

CREATE OR REPLACE FUNCTION sec_to_time(bigint) RETURNS text AS $$
SELECT to_char( ($1|| ' seconds')::interval, 'HH24:MI:SS');
$$ LANGUAGE 'SQL' IMMUTABLE;

例えば:

regress=# SELECT sec_to_time(9999999);
 sec_to_time 
-------------
 2777:00:39
(1 row)

結果が必要な場合は、次INTERVALを使用します。

CREATE OR REPLACE FUNCTION sec_to_time(bigint) RETURNS interval AS $$
SELECT justify_interval( ($1|| ' seconds')::interval);
$$ LANGUAGE 'SQL' IMMUTABLE;

...次のような結果が生成されます。

SELECT sec_to_time(9999999);
       sec_to_time       
-------------------------
 3 mons 25 days 17:46:39
(1 row)

ただし、 INTERVALto をキャストしないでください。TIME日の部分は破棄されます。代わりに切り捨てなしto_char(theinterval, 'HH24:MI:SS)に変換するために使用します。text

于 2012-08-23T08:23:59.303 に答える