postgresql - форматировать интервал как время с большим количеством часов - PullRequest
2 голосов
/ 16 июня 2020

У меня есть интервал, который рассчитывается между событиями, которые могут составлять дни или часы.

Некоторые строки показывают желаемое

00:15:38.687282

В то время как другие дают мне худшее read

2 days 22:20:33.505085

Как я могу сделать так, чтобы второй пример возвращал следующее?

70:22:33.505085

Спасибо за любую помощь.

Ответы [ 3 ]

2 голосов
/ 16 июня 2020

Другое решение:

select extract(epoch from interval '2 days 22:20:33.505085')/3600 * interval '1h';
┌─────────────────┐
│    ?column?     │
╞═════════════════╡
│ 70:20:33.505085 │
└─────────────────┘
(1 row)
1 голос
/ 16 июня 2020

Вы можете создать собственное представление с помощью extract():

floor(extract(epoch from val) / 60 / 60)
|| ':' || extract(minute from val)
|| ':' || extract(second from val)

Демо на DB Fiddle :

select 
    floor(extract(epoch from val) / 60 / 60)
    || ':' || extract(minute from val)
    || ':' || extract(second from val) display
from (values ('2 days 22:20:33.505085'::interval)) as t(val)
| display         |
| :-------------- |
| 70:20:33.505085 |
0 голосов
/ 16 июня 2020

Быстрое и грязное решение:

SELECT
   extract(days from '2 days 22:20:33.505085'::interval) * interval '24 hour' + '22:20:33.505085'::interval

 ?column?     
-----------------
 70:20:33.505085

Если вы хотите принять более активное участие, то учитывайте месяцы, годы и так далее, тогда вам, вероятно, потребуется создать функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...