Como faço para converter um intervalo para um número de horas com postgres?
-
11-09-2019 - |
Pergunta
Say I tem um intervalo como
4 days 10:00:00
no Postgres. Como faço para convertê-lo em um número de horas (106 neste caso?) Existe uma função ou devo morder a bala e fazer algo como
extract(days, my_interval) * 24 + extract(hours, my_interval)
Solução
Provavelmente a maneira mais fácil é:
SELECT EXTRACT(epoch FROM my_interval)/3600
Outras dicas
Se você quiser inteiro ou seja, número de dias:
SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int
Para obter o número de dias a maneira mais fácil seria:
SELECT EXTRACT(DAY FROM NOW() - '2014-08-02 08:10:56');
Tanto quanto eu sei que iria retornar o mesmo que:
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));
A conversão ::int
segue o princípio de arredondamento.
Se você quer um resultado diferente, como o arredondamento para baixo, você pode usar a função matemática correspondente, como floor
.
Se você converter campo de tabela:
-
Defina o campo para que ele contém segundos:
CREATE TABLE IF NOT EXISTS test ( ... field INTERVAL SECOND(0) );
-
Extraia o valor. Lembre-se de elenco para int outro sábio você pode ter uma surpresa desagradável uma vez que os intervalos são grandes:
EXTRACT(EPOCH FROM field)::int
select date 'now()' - date '1955-12-15';
Aqui está a consulta simples que calcula Não Total de dias.