如何将大量的秒设置为小时和分钟



我有一个字符串列durationinseconds。我想把sum(durationinseconds)作为小时和分钟来阅读。

示例:
持续时间秒的总和为54000000300秒
现在我想将其转换为:

15000000 hrs 5 min

想要将其查询到Apache超集中。

我尝试使用下面的查询,但没有得到正确的值:

SELECT 
sum(durationInSeconds)
, FLOOR( ( sum(durationInSeconds) / 3600 ) - FLOOR( sum(durationInSeconds )/ 86400 ) * 24 ) AS HOURS 
, FLOOR( ( sum(durationInSeconds )/ 60 ) - FLOOR( sum(durationInSeconds) / 3600 ) * 60 ) AS MINUTES 
FROM tickets 

以下是我得到的不正确的输出:

duration in seconds=395069295299 hr=6 min =54

转换为整数(bigint保存大值(并与interval '1 sec':相乘

SELECT '54000000300'::bigint * interval '1 sec';

使用to_char()完全按照要求进行格式化:

SELECT to_char('54000000300'::bigint * interval '1 sec', 'FMHH24" hrs "FMMI" min"');

db<gt;小提琴这里

应用于您的查询:

SELECT to_char(sum("durationInSeconds"::bigint) * interval '1 sec', 'FMHH24" hrs "FMMI" min"')
FROM   tickets 

假设你真的双重引用了不幸的CaMeL案例名称";持续时间InSeconds";。否则去掉双引号。参见:

  • PostgreSQL列名区分大小写吗

并且只有当CCD_ 6真的是";字符串列"-对于数值或区间量也是一种不幸的设计。

手册:

to_char(interval)HHHH12格式化为12小时时钟上所示,例如0小时和36小时都输出为12,而HH24输出全小时值,在interval值中可能超过23。

模板模式中的FM代表:

填充模式(抑制前导零和填充空格(

乘法通常比字符串串联更快
to_char()速度也很快,可以很好地处理角落案例。

select  ((54000000300/3600.0)::text || 'hrs')::interval;
interval    
----------------
15000000:05:00

最新更新