Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Maneira mais fácil de preencher uma tabela temporária com datas entre e incluindo 2 parâmetros de data


Isso funciona mesmo que @StartDate não seja o primeiro do mês. Estou assumindo que, se não for o início do mês, você deseja começar com o primeiro do próximo mês. Caso contrário, remova o +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)