有趣的SQL难题
|
没有循环或游标,如何获取日期间隔列表并将其转换为1和0的字符串,使得:
每一位代表从最小(所有日期)到最大(所有日期)的每一天
如果该日期属于任何日期间隔,则该位为1
如果该日期不属于任何间隔,则该位为0
因此,例如,如果间隔为:
2011年1月1日至2011年1月2日
2011年1月4日至2011年1月5日
然后,您编写的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
没有找到相关结果
已邀请:
3 个回复
瞧叮
脖呐
眠缝