postgres中excel的hour()函数(等效)

时间:2018-08-15 17:16:05

标签: postgresql excel-formula equivalent

我最近正在与postgres合作,我必须进行一些计算。但是,我无法模仿Excel的HOUR()函数,我读了official information,但对我没有多大帮助。

该函数接收一个小数,并获得相同的小时,分​​钟和秒,例如,小数0,99988426返回11:59:50。尝试使用to_timestamp函数在postgres(我使用PostgreSQL 10.4)中执行以下操作:选择to_char(to_timestamp(0.99988426),“ HH24:MI:SS”);此返回19:00:00。我肯定会省略一些东西,如何解决这个问题的想法吗?

2 个答案:

答案 0 :(得分:2)

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';

答案 1 :(得分:0)

要处理的主要差异有两个:

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)