Generate a Start and End Date Range using T-SQL

I was generating a date range by specifying a Start and End Date and an interval. I wanted the following output with an interval of 3 days (including the start date):

StartDate EndDate

2010-01-01 00:00:00.000 2010-01-03 00:00:00.000
2010-01-04 00:00:00.000 2010-01-06 00:00:00.000

and so on..

Here’s the query (thanks toTGBraitman) to generate the range:

DECLARE
@StartDate datetime = '2010-01-01',
@EndDate datetime = '2010-03-01',
@interval smallint = 3

;WITH CTE as
(
SELECT @StartDate as StDt
UNION ALL
SELECT DATEADD(day, @interval, StDt)
FROM CTE
WHERE DATEADD(day, @interval, StDt) <= @EndDate
)

SELECT StDt as StartDate,
DATEADD(day, @interval-1, StDt) as EndDate
FROM CTE

OUTPUT

Generate Date Range T-SQL


About The Author

Suprotim Agarwal, MCSD, MCAD, MCDBA, MCSE, is the founder of DotNetCurry, DNC Magazine for Developers, SQLServerCurry and DevCurry. He has also authored a couple of books 51 Recipes using jQuery with ASP.NET Controls and a new one recently at The Absolutely Awesome jQuery CookBook.

Suprotim has received the prestigous Microsoft MVP award for nine times in a row now. In a professional capacity, he is the CEO of A2Z Knowledge Visuals Pvt Ltd, a digital group that represents premium web sites and digital publications comprising of Professional web, windows, mobile and cloud developers, technical managers, and architects.

Get in touch with him on Twitter @suprotimagarwal, LinkedIn or befriend him on Facebook

No comments: