在 PostgreSQL 查询中返回超过 24 小时
Returning 24+ hours in PostgreSQL query
好的...我这里有一个计算服务器正常运行时间的查询,有时这个正常运行时间超过 24 小时。我基本上用
select start, end, start-end as real_uptime from uptime
start
和 end
是 timestamp with timezone
个字段
此外,我有一个存储函数,可以对一段时间内的所有 real_uptime
和 returns 求和...
但是,我转储值 start
和 end
并将它们放入电子表格中,然后在那里进行计算,结果与存储函数处理的结果不同(存储函数返回较低的值)。我认为他忽略了 real_uptime
超过一天的结果。 Postgresql 将它们显示为 x days hh:mm:ss
... 我希望它们为 hh:mm:ss
(代表以小时为单位的总正常运行时间, 没有 全天数。
有什么想法吗?
在 PostgreSQL 中,您可以 extract
来自时间戳的 epoch
:自 1970 年 1 月 1 日以来经过的秒数 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()
函数使分和秒总是两个字符宽。
好的...我这里有一个计算服务器正常运行时间的查询,有时这个正常运行时间超过 24 小时。我基本上用
select start, end, start-end as real_uptime from uptime
start
和 end
是 timestamp with timezone
个字段
此外,我有一个存储函数,可以对一段时间内的所有 real_uptime
和 returns 求和...
但是,我转储值 start
和 end
并将它们放入电子表格中,然后在那里进行计算,结果与存储函数处理的结果不同(存储函数返回较低的值)。我认为他忽略了 real_uptime
超过一天的结果。 Postgresql 将它们显示为 x days hh:mm:ss
... 我希望它们为 hh:mm:ss
(代表以小时为单位的总正常运行时间, 没有 全天数。
有什么想法吗?
在 PostgreSQL 中,您可以 extract
来自时间戳的 epoch
:自 1970 年 1 月 1 日以来经过的秒数 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()
函数使分和秒总是两个字符宽。