我有一个字符串列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)
将HH
和HH12
格式化为12小时时钟上所示,例如0小时和36小时都输出为12,而HH24
输出全小时值,在interval
值中可能超过23。
模板模式中的FM
代表:
填充模式(抑制前导零和填充空格(
乘法通常比字符串串联更快to_char()
速度也很快,可以很好地处理角落案例。
select ((54000000300/3600.0)::text || 'hrs')::interval;
interval
----------------
15000000:05:00