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)
Foi útil?

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:

  1. Defina o campo para que ele contém segundos:

     CREATE TABLE IF NOT EXISTS test (
         ...
         field        INTERVAL SECOND(0)
     );
    
  2. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top