Как я могу преобразовать интервал в количество часов с Postgres? - PullRequest
117 голосов
/ 04 июня 2009

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

4 days 10:00:00

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

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

Ответы [ 6 ]

234 голосов
/ 04 июня 2009

Наверное, самый простой способ:

SELECT EXTRACT(epoch FROM my_interval)/3600
14 голосов
/ 16 августа 2014

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

SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int
5 голосов
/ 14 июня 2016

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

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;
1 голос
/ 24 апреля 2018
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));

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

1 голос
/ 19 июля 2017

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

  1. Определите поле так, чтобы оно содержало секунды:

     CREATE TABLE IF NOT EXISTS test (
         ...
         field        INTERVAL SECOND(0)
     );
    
  2. Извлеките значение. Не забудьте привести к int В противном случае вы можете получить неприятный сюрприз, когда интервалы будут большими:

    EXTRACT(EPOCH FROM field)::int

0 голосов
/ 17 февраля 2016
         select date 'now()' - date '1955-12-15';

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...