Can you please let me know the SQL to split date ranges when they overlap?
Data (sample data with a date range and possibly other columns):
Col1 From
Skliwz's answer adapted for SQL Server:
DECLARE @DateTest TABLE
(
FromDate datetime,
ToDate datetime
)
insert into @DateTest (FromDate, ToDate)
(
select cast('1/1/2008' as datetime), cast('12/31/2010' as datetime)
union
select cast('1/1/2009' as datetime), cast('12/31/2012' as datetime)
union
select cast('1/1/2009' as datetime), cast('12/31/2014' as datetime)
)
SELECT
FromDate , min(ToDate)
FROM (
SELECT t1.FromDate, t2.ToDate
FROM
@DateTest t1,
@DateTest t2
WHERE t1.FromDate < t2.ToDate
UNION
SELECT dateadd(DAY, 1, t1.ToDate), t2.ToDate
FROM
@DateTest t1,
@DateTest t2
WHERE dateadd(DAY, 1, t1.ToDate) < t2.ToDate
) allRanges
group by FromDate