将 postgres 间隔正确格式化为 HH:MM

问题描述 投票:0回答:2

尝试在postgre中计算时间间隔,

SELECT 
    employee_id,
    clock_in,
    clock_out,
    (SELECT EXTRACT(epoch FROM (clock_out-clock_in))/3600) AS time_worked
FROM
    payroll_timelog
WHERE
    employee_id=31;

我正在尝试将其格式化为

HH:MM
格式,但我得到以 10 为基数的浮点数
7.975380470833334

这应该是 7.58(7 小时 58 分钟)。这种精度很重要。

我尝试转换为 int:

(SELECT EXTRACT(epoch FROM (clock_out-clock_in))::int/3600) AS time_worked

但是四舍五入为

7

如何确保获得理想的7.58结果?

sql postgresql
2个回答
7
投票

从两个日期时间中减去后,我们可以使用

TO_CHAR
HH24:MI
格式。

SELECT 
    employee_id,
    clock_in,
    clock_out,
    TO_CHAR(clock_out - clock_in,'HH24:MI')
FROM
    payroll_timelog
WHERE
    employee_id=31;

sqlfiddle


0
投票

上面的答案忽略“day”,对于“4 days 06:30:00”返回“06:30”,这是不正确的,考虑“day”应该使用这个:

select concat(EXTRACT(DAY FROM (clock_out - clock_in)) * 24 + EXTRACT(HOUR FROM (clock_out - clock_in)),':',EXTRACT(MINUTE FROM (clock_out - clock_in))) AS time_worked
© www.soinside.com 2019 - 2024. All rights reserved.