Как преобразовать интервал в количество часов с помощью postgres?
скажем, у меня есть интервал, как
4 days 10:00:00
в postgres. Как мне преобразовать это в число часов (106 в данном случае?) Есть ли функция или я должен укусить пулю и сделать что-то вроде
extract(days, my_interval) * 24 + extract(hours, my_interval)
6 ответов:
Если вы хотите целое число, т. е. количество дней:
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.
Если вы конвертируете поле таблицы:
- определите поле, чтобы оно содержало секунды:
CREATE TABLE IF NOT EXISTS test ( ... field INTERVAL SECOND(0) );- извлечь значение. Не забудьте бросить в int другой мудрый вы можете получить неприятный сюрприз, как только интервалы большие:
EXTRACT(EPOCH FROM field)::int
select date 'now()' - date '1955-12-15';вот простой запрос, который подсчитывает общее количество дней.
Comments