Я пытаюсь создать доступную функцию временного интервала. для каждого дня я фиксирую время начала и время окончания.
for eg: start time is 08:00 AM and end time is 03:00 PM.
У меня есть другая таблица, в которой записано время перерыва в тот же день,
for eg: 11:00 AM to 11:15 AM and 01:00 PM to 1:30 PM.
А в другой таблице я храню уже забронированные слоты
for eg:
09:00 AM to 09:30 AM
11:15 AM to 11:45 AM
01:30 PM 02:00PM
Я использую generate_series для создания временных интервалов между временем начала и окончания.
select * FROM generate_series(
timestamp '2016-11-09 08:00 AM',
timestamp '2016-11-09 03:00 PM',
INTERVAL '30m'
) t
Мне нужно исключить время перерыва и уже забронированное время из этой сгенерированной серии. Я попытался использовать функцию except, но этот слот с 11:15 до 11:45 удалить не удалось. Как мне вообще написать условие для удаления этого?
Кроме запроса
SELECT t
FROM generate_series(
timestamp '2016-11-09 08:00 AM',
timestamp '2016-11-09 03:00 PM',
INTERVAL '1 hour'
) t
EXCEPT
SELECT concat(start_date,' ' , start_time)::timestamp as booked
FROM my_table where start_date::date = '2016-11-09';
детали my_table
CREATE TABLE public.my_table
(
id bigint NOT NULL,
start_date character varying(500),
start_time character varying(500),
CONSTRAINT pk_my_table PRIMARY KEY (id))
WITH (
OIDS=FALSE
);