在PostgreSQL查询中返回24小时以上

时间:2015-09-21 13:58:06

标签: postgresql function select timestamp

好吧......我这里有一个计算服务器正常运行时间的查询,有时这个正常运行时间超过24小时。我基本上用

select start, end, start-end as real_uptime from uptime

startendtimestamp with timezone字段

另外,我有一个存储函数,它将一段时间内的所有real_uptime相加并返回它们......

但是,我转储了值startend并将它们放入电子表格中,并在那里进行计算,结果与存储的函数处理的结果不同(存储的函数返回较低)值)。我认为他忽略real_uptime大于一天的结果。 Postgresql将它们显示为x days hh:mm:ss ...我希望它们为hh:mm:ss(表示以小时为单位的总运行时间,整天计算。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

在PostgreSQL中,您可以extract epoch来自时间戳:自1970-01-01 00:00:00以来经过的秒数。使用这些值,您可以轻松构建所需的输出:

SELECT "start", "end", format('%s:%s:%s', 
         (up_secs / 3600)::int::text,                       -- hours
         lpad(((up_secs % 3600) / 60)::int::text, 2, '0'),  -- minutes
         lpad((up_secs % 60)::text, 2, '0')) AS uptime      -- seconds
FROM (
  SELECT "start", "end",
         (extract(epoch from "end") - extract(epoch from "start")) AS up_secs
  FROM uptime) sub;

lpad()函数使分钟和秒总是两个字符宽。