mysql - PostgreSQL 中的 sec_to_time() 函数?

标签 mysql database postgresql postgresql-9.1 postgresql-9.0

MySQL有一个很酷的功能sec_to_time()它将您的秒数转换为 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 中执行此操作?

最佳答案

使用to_char :

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

这是一个生成文本格式值的函数:

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)

不要将 INTERVAL 转换为 TIME;它会丢弃天部分。使用 to_char(theinterval, 'HH24:MI:SS) 将其转换为 text 而不是截断。

关于mysql - PostgreSQL 中的 sec_to_time() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12085307/

相关文章:

javascript - 为什么只有第一次点击会增加投票计数器,而其他点击则不会?

使用 CURL 加载文件的 PHP Cron 脚本效率

mysql - Rails 错误地提示将 postgres 添加到 bundle 中

sql - 我如何正确地将这两个 PSQL 查询连接在一起?

MySQL - 按时间获取最后一个条目(如果为空则为第一个)

php - Mysql 从连接中检索特定数量的分组行

php - 使用 jQuery 在 mySQL 表中添加新记录和更新记录失败

php - 从数据库中检索数据导致 0 个结果

python - Django:如何根据数据库中的日期时间触发事件

java - 程序关闭后事务是否结束?