Как выбрать свободное время между временем начала и окончания в sql? - PullRequest
0 голосов
/ 05 декабря 2018

Я хочу выбрать все свободное время, кроме указанных, для которых комната свободна.

например, таблица:

room starttime  endtime  date
1   |  12pm    |  1pm   |  2018-02-18 00:00:00.000
1   |  2pm     |  3pm   |  2018-02-18 00:00:00.000
1   |  3pm     |  5pm   |  2018-02-18 00:00:00.000

ожидаемый результат, например: свободное время 6-12,5-10 Возможно ли это?

Заранее спасибо.

Это для задания, где комната забронирована для класса на определенное время начала (дата) и время окончания (дата) и дату.

Мне нужно выяснить, когда урок будет бесплатным.Выше бесплатные сроки были только примером.

1 Ответ

0 голосов
/ 09 декабря 2018

Возможное решение:

set dateformat ymd

-- Sample data
declare @MyTable
    table (room varchar(1), starttime varchar(4), endtime varchar(4), [date] datetime)
insert into @MyTable values ('1', '12pm', '1pm', '2018-02-18 00:00:00.000')
insert into @MyTable values ('1', '2pm', '3pm', '2018-02-18 00:00:00.000')
insert into @MyTable values ('1', '3pm', '5pm', '2018-02-18 00:00:00.000')

select d.[date], r.room, t.freehour
from
    (select cast(dateadd(hour, number, 0) as time) as freehour
            from master..spt_values where type = 'P' and number between 6 and 22) t,
    (select distinct room from @MyTable) r,
    (select distinct [date] as [date] from @MyTable) d
where not exists (
        select 1
        from @MyTable m
        where m.[date] = d.[date]
            and m.room = r.room
            and t.freehour between cast(m.starttime as time)
                and dateadd(hour,-1,cast(m.endtime as time))
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...