在Postgres中将几天转换成几小时

时间:2020-09-02 13:24:38

标签: sql postgresql

在Postgres查询中,我有小时,分钟,秒和天作为结果。我想将所有内容转换为小时。

示例

Row 1 result: 19:53:45
Row 2 result: 1 day 05:41:58

现在我想将天数转换为如下所示的小时数

   Row 1 result:19:53:45
    Row 2 result: 29:41:58

有人可以帮我在postgres sql中做到这一点吗?

2 个答案:

答案 0 :(得分:0)

由于时间限制为24小时,因此您大概希望将结果作为字符串。您可以将其构造为:

select *,
       (case when ar[1] like '%day%'
             then (split_part(col, ' ', 1)::int * 24 + split_part(ar[1], ' ', 3)::int)::text ||
                  right(col, 6)
             else col
        end)
from (values ('19:53:45'), ('1 day 05:41:58')) v(col) cross join lateral
     regexp_split_to_array(col, ':') a(ar);

您也可以在没有a的情况下执行此操作:

select *, 
       (case when col like '%day%'
             then (split_part(col, ' ', 1)::int * 24 + (regexp_match(col, ' ([0-9]+):'))[1]::int)::text ||
                  right(col, 6)
             else col
        end)
from (values ('19:53:45'), ('1 day 05:41:58')) v(col) ;

答案 1 :(得分:0)

根据标准SQL,

cast(col as interval hour to minute)应该可以工作。

无论如何,这似乎可行:

col - extract(day from col) * interval '1'  day  -- remove the days 
    + extract(day from col) * interval '24' hour -- and add back as hours

请参见fiddle