在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中做到这一点吗?
答案 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)
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