Use Recursive CTE. SOmething like:-;With Date_CTE (Seq,DateValue) AS(SELECT 0,@StartDate,NULLUNION ALLSELECT Seq+1,DATEADD(d,(-1) * DATEADD(d,1,DATEPART(dd,DATEADD(m,1,DateValue))),DATEADD(m,1,DateValue))FROM Date_CTEWHERE DateValue < @EndDate)SELECT CONVERT(varchar(11),t1.DateValue,101) + '-' + CONVERT(varchar(11),DATEADD(d,-1,t2.DateValue),101) FROM Date_CTE t1INNER JOIN Date_CTE t2 ON t1.DateValue <> t2.DateValueAND t1.Seq=t2.Seq-1