Как без циклов или курсоров взять список интервалов дат и превратить их в строку из 1 и 0, чтобы:
- каждый бит представляет каждый день от минимального (все даты) до максимального (все даты)
- бит равен 1, если этот день попадает в любой из интервалов дат
- бит равен 0, если этот день не попадает ни в один из интервалов
Так, например, если бы интервалы были:
- 1/1/2011 to 1/2/2011
- 1/4/2011 to 1/5/2011
Затем написанный вами SQL должен выводить 11011. Вот сценарий установки, который вы можете использовать:
declare @TimeSpan table
(
start datetime
,finish datetime
)
-- this is a good data set, with overlapping and non-overlapping time spans
insert into @TimeSpan values ('02/02/2010', '02/02/2010')
insert into @TimeSpan values ('02/03/2010', '02/03/2010')
insert into @TimeSpan values ('02/04/2010', '02/05/2010')
insert into @TimeSpan values ('02/05/2010', '02/06/2010')
insert into @TimeSpan values ('02/07/2010', '02/09/2010')
insert into @TimeSpan values ('02/08/2010', '02/08/2010')
insert into @TimeSpan values ('02/08/2010', '02/10/2010')
insert into @TimeSpan values ('02/14/2010', '02/16/2010')
-- for this set of data, the output string would be 111111111000111