Как преобразовать интервал в количество часов с помощью postgres?



скажем, у меня есть интервал, как



4 days 10:00:00


в postgres. Как мне преобразовать это в число часов (106 в данном случае?) Есть ли функция или я должен укусить пулю и сделать что-то вроде



extract(days, my_interval) * 24 + extract(hours, my_interval)
1562   6  

6 ответов:

наверное, самый простой способ сделать это:

SELECT EXTRACT(epoch FROM my_interval)/3600

Если вы хотите целое число, т. е. количество дней:

SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int

чтобы получить количество дней, самый простой способ будет такой:

SELECT EXTRACT(DAY FROM NOW() - '2014-08-02 08:10:56');

насколько я знаю, он вернется так же, как:

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));

The ::int преобразование следует принципу округления. Если вы хотите получить другой результат, такой как округление вниз, вы можете использовать соответствующую математическую функцию, такую как floor.

Если вы конвертируете поле таблицы:

  1. определите поле, чтобы оно содержало секунды: CREATE TABLE IF NOT EXISTS test ( ... field INTERVAL SECOND(0) );
  2. извлечь значение. Не забудьте бросить в int другой мудрый вы можете получить неприятный сюрприз, как только интервалы большие: EXTRACT(EPOCH FROM field)::int
         select date 'now()' - date '1955-12-15';

вот простой запрос, который подсчитывает общее количество дней.

Comments

    Ничего не найдено.