Tengo un intervalo que se calcula entre eventos que pueden ser días u horas entre ellos.
Algunas filas muestran lo deseable
00:15:38.687282Mientras que otros me dan una peor lectura
2 days 22:20:33.505085¿Cómo puedo hacer que el segundo ejemplo devuelva lo siguiente?
70:22:33.505085Gracias por cualquier ayuda.
Otra solución:
select extract(epoch from interval '2 days 22:20:33.505085')/3600 * interval '1h'; ┌─────────────────┐ │ ?column? │ ╞═════════════════╡ │ 70:20:33.505085 │ └─────────────────┘ (1 row)Puede crear una representación personalizada con extract() :
floor(extract(epoch from val) / 60 / 60) || ':' || extract(minute from val) || ':' || extract(second from val) 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)| pantalla | | :-------------- | | 70:20:33.505085 |
Una solución rápida y sucia:
SELECT extract(days from '2 days 22:20:33.505085'::interval) * interval '24 hour' + '22:20:33.505085'::interval ?column? ----------------- 70:20:33.505085Si desea involucrarse más, tenga en cuenta meses, años, etc., entonces probablemente necesitará crear una función.