Разделите время на куски, используя Postgres Queries - PullRequest
0 голосов
/ 15 октября 2018

Здесь у меня есть два тайминга: start_time, end_time и interval, и мой вывод должен выглядеть примерно так:

Ввод:

  • start_time: 10:00 AM
  • end_time: 18:00
  • интервал: 10 мин

мой вывод должен выглядеть следующим образом

10:00 AM
10:10 AM
10:20 AM
....
5:50 PM
6:00 PM

с использованием запросов postgres

1 Ответ

0 голосов
/ 15 октября 2018

Вы можете использовать generate_series() для этого.К сожалению, он не поддерживает генерацию серии значений time напрямую.Поэтому вам нужно сгенерировать серию «количество минут», которое вы хотите добавить.Для этого вам нужно рассчитать количество минут между временем начала и окончания и использовать его для generate_series()

select time '10:00' + interval '1' minute * gs.minutes 
from generate_series(0, 
                     (extract(epoch from time '18:00' - time '10:00') / 60)::int,
                     10) as gs(minutes);

Выражение extract(epoch from time '18:00' - time '10:00') / 60 вычисляет количество минут между началом ивремя окончания и передает его в качестве верхнего предела значений для генерации (его необходимо привести к целому числу, чтобы сделать generate_series () счастливым).Третий параметр 10 указывает на генерацию числа с шагом 10. Затем он умножается с интервалом в 1 минуту и ​​добавляется к начальному значению.

Обратите внимание, что литералы времени, написанные таким образом, используют стандартную 24-часовую запись ISO, а не AM / PM.Но вы можете отформатировать вывод, используя to_char(), чтобы получить его, если хотите.Но вам лучше отформатировать это в вашем приложении, а не в SQL.

Онлайн-пример: https://rextester.com/XUJ25540


Альтернативный способ - использовать версию generate_series(), которая генерирует временные метки, и приводить результат к значению time (исключая датучасть):

select gs.ts::time
from generate_series(current_date + time '10:00', 
                     current_date + time '18:00', 
                     interval '10' minute) as gs(ts);

Онлайн пример: https://rextester.com/YRNAW81361

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