Digamos que tengo un intervalo como
4 days 10:00:00
en postgres. ¿Cómo convierto eso en varias horas (106 en este caso?) ¿Hay una función o debo morder la bala y hacer algo como
extract(days, my_interval) * 24 + extract(hours, my_interval)
Digamos que tengo un intervalo como
4 days 10:00:00
en postgres. ¿Cómo convierto eso en varias horas (106 en este caso?) ¿Hay una función o debo morder la bala y hacer algo como
extract(days, my_interval) * 24 + extract(hours, my_interval)
Respuestas:
Probablemente la forma más fácil es:
SELECT EXTRACT(epoch FROM my_interval)/3600
Si quieres entero, es decir, número de días:
SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int
SELECT extract('epoch' FROM age('2014-08-02'::timestamp)) / 86400
(estoy usando la página 9.4), ya que age(ts)
automáticamente lo uso CURRENT_DATE
cuando solo hay un argumento.
Para obtener la cantidad de días, la forma más fácil sería:
SELECT EXTRACT(DAY FROM NOW() - '2014-08-02 08:10:56');
Hasta donde sé, devolvería lo mismo que:
SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int;
'1 month 0 days'
, el uso extract(day from …)
le dará 0
como resultado.
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 ::int
conversión sigue el principio de redondeo. Si desea un resultado diferente, como redondear hacia abajo, puede utilizar la función matemática correspondiente, como floor
.
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 enviar a int de otra manera puede obtener una sorpresa desagradable una vez que los intervalos son grandes:
EXTRACT(EPOCH FROM field)::int
select date 'now()' - date '1955-12-15';
Aquí está la consulta simple que calcula el total de días.