hour() function of excel in postgres (equivalent)



我最近正在使用postgres,我必须进行几次计算。但是我无法模仿Excel的HOUR((功能,我阅读了官方信息,但它对我没有多大帮助。

该函数接收小数并获取相同的小时、分钟和秒,例如十进制 0,99988426 返回 11:59:50。尝试在 postgres 中执行此操作(我使用 PostgreSQL 10.4(和 to_timestamp 函数:选择 to_char (to_timestamp (0.99988426(,'HH24: MI: SS'(;此返回 19:00:00。当然,我省略了一些东西,一些关于如何解决这个问题的想法?

24:00:00 or 86400 seconds = 1 
Half day(12:00 noon) or 43200 seconds = 43200/86400 = 0.5
11:59:50 or 86390 seconds = 86390/86400 = 0.99988426

因此,要将十进制值转换为时间,您所要做的就是将其乘以 86400,这将为您提供秒数并通过以下方式将其转换为您的格式:

SELECT TO_CHAR((0.99988426 * 86400) * '1 second'::interval, 'HH24:MI:SS');
SELECT (0.99988426 * 86400) * interval '1 sec';

有两个主要区别需要处理:

Excel 不考虑时区。序列日期 0 从 0h00 开始,但 Postgres 使用时区,因此变为 19h。您需要在 Postgres 结果中使用 UTC 才能与 Excel 中的相同。

select to_char (to_timestamp (0), 'HH24: MI: SS'),to_char (to_timestamp (0) AT TIME ZONE 'UTC', 'HH24: MI: SS');
to_char   |  to_char
------------+------------
19: 00: 00 | 00: 00: 00

Excel 认为 1 是一天,而 Postgres 认为 1 是 1 秒。要获得相同的行为,请将您的数字乘以 86400,即一天中的秒数

select to_char (to_timestamp (0.99988426*86400) AT TIME ZONE 'UTC', 'HH24: MI: SS');
to_char
------------
23: 59: 50
(1 row)

最新更新