serg-52 - Tuesday, March 18, 2014 2:08 AM
a simpler and i think faster aproach
DECLARE @strtDate DATE = '20140101'
DECLARE @step INT = 30
DECLARE @N INT = 20
;WITH RANGES AS (
SELECT 1 AS id
, @strtDate AS dt_ini
, DATEADD(DAY, @step - 1, @strtDate) AS dt_end
, @step AS mlst
UNION ALL
SELECT R.id + 1 AS id
, DATEADD(DAY, @step, R.dt_ini) AS dt_ini
, DATEADD(DAY, @step, R.dt_end) AS dt_end
, R.mlst + @step AS mlst
FROM RANGES R
WHERE R.id < @step -- if you want @step to be more than 100 you need to add "option (maxrecursion 0)" at the end of statment
)
SELECT *
FROM RANGES