datetime - example - ¿Cómo convierto un intervalo en un número de horas con postgres?
interval postgresql (6)
Para obtener el número de días, la forma más fácil sería:
SELECT EXTRACT(DAY FROM NOW() - ''2014-08-02 08:10:56'');
Por lo que yo sé, devolvería lo mismo que:
SELECT (EXTRACT(epoch FROM (SELECT (NOW() - ''2014-08-02 08:10:56'')))/86400)::int;
Digamos que tengo un intervalo como
4 days 10:00:00
en postgres ¿Cómo puedo convertir eso en un número de horas (106 en este caso?) ¿Hay una función o debo morder la bala y hacer algo así como
extract(days, my_interval) * 24 + extract(hours, my_interval)
Probablemente la forma más fácil es:
SELECT EXTRACT(epoch FROM my_interval)/3600
Si convierte el campo de tabla:
- Defina el campo para que contenga segundos:
CREATE TABLE IF NOT EXISTS test ( ... field INTERVAL SECOND(0) );
- Extrae el valor. Recuerde lanzar de otra manera, puede obtener una sorpresa desagradable una vez que los intervalos son grandes:
EXTRACT(EPOCH FROM field)::int
Si quieres un número entero, es decir, el número de días:
SELECT (EXTRACT(epoch FROM (SELECT (NOW() - ''2014-08-02 08:10:56'')))/86400)::int
select floor((date_part(''epoch'', order_time - ''2016-09-05 00:00:00'') / 3600)), count(*) from od_a_week group by floor((date_part(''epoch'', order_time - ''2016-09-05 00:00:00'') / 3600));
La conversión ::int
sigue el principio de redondeo. Si desea un resultado diferente, como redondear hacia abajo, puede usar la función matemática correspondiente, como el floor
.
select date ''now()'' - date ''1955-12-15'';
Aquí está la consulta simple que calcula el número total de días.