как преобразовать целые минуты в интервал в postgres

Я пытаюсь преобразовать минуты, которые являются целыми числами, в интервал в postgres

Есть ли у них какая-либо функция, которая поможет мне преобразовать его в интервал, или я должен разделить его на 60 и получить окончательный результат

20 minutes will be like 00:20:00 as result 

person Abhijeet Gulve    schedule 27.04.2017    source источник
comment
Вы должны отметить это и передать его администраторам баз данных.   -  person Evan Carroll    schedule 27.04.2017


Ответы (3)


Самый быстрый способ - с make_interval

make_interval(years int DEFAULT 0, months int DEFAULT 0, weeks int DEFAULT 0, days int DEFAULT 0, hours int DEFAULT 0, mins int DEFAULT 0, secs double precision DEFAULT 0.0)

Итак, это выглядит так (как предлагает @Teddy)

SELECT make_interval(mins => 20);

or,

SELECT make_interval(0,0,0,0,0,20);

Не сказать, что это самый чистый, если скорость не является проблемой, я предпочитаю * метод @a_horse_with_no_name, упомянутый

SELECT 20 * '1 minute'::interval;
person Evan Carroll    schedule 27.04.2017
comment
Почему не просто make_interval(mins := 20)? - person Teddy; 26.07.2017

вы можете объединить это целое число с ' minutes':

t=# with i as (
  select 20::int n
)
select concat(n,' minutes')::interval 
from i;
  concat
----------
 00:20:00
(1 row)

Time: 1.220 ms

Обновление:

Или: interval '1' minute * n, как говорит a_horse_with_no_name

person Vao Tsun    schedule 27.04.2017
comment
Я выбрал этот и использовал более короткую форму конкатенации: select (n||' minutes')::interval - person Expurple; 08.04.2021

В случае, если вы пытаетесь вставить данные в столбец interval, вы можете использовать целые секунды, и PostgreSQL преобразует их в интервал.

person Edgar Ortega    schedule 13.02.2019
comment
К сожалению, я получаю это: Ошибка базы данных ERROR 22015: значение поля интервала вне диапазона: 86400000000 - person Nebex Elias; 12.05.2021