SQL Date Range Split

前端 未结 2 1732
小鲜肉
小鲜肉 2021-02-04 17:26

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         


        
2条回答
  •  刺人心
    刺人心 (楼主)
    2021-02-04 17:54

    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
    

提交回复
热议问题