Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Le moyen le plus simple de remplir une table temporaire avec des dates entre et incluant 2 paramètres de date

Cela fonctionne même si @StartDate n'est pas le premier du mois. Je suppose que si ce n'est pas le début du mois, vous voulez commencer par le premier du mois suivant. Sinon supprimer le +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)