sql >> Base de Datos >  >> RDS >> Sqlserver

La forma más fácil de completar una tabla temporal con fechas entre 2 parámetros de fecha inclusive

Esto funciona incluso si @StartDate no es el primero del mes. Supongo que si no es el comienzo del mes, desea comenzar con el primero del próximo mes. De lo contrario, elimine el +1.:

;WITH cte AS (
SELECT CASE WHEN DATEPART(Day,@StartDate) = 1 THEN @StartDate 
            ELSE DATEADD(Month,DATEDIFF(Month,0,@StartDate)+1,0) END AS myDate
UNION ALL
SELECT DATEADD(Month,1,myDate)
FROM cte
WHERE DATEADD(Month,1,myDate) <=  @EndDate
)
SELECT myDate
FROM cte
OPTION (MAXRECURSION 0)