Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Einfachste Möglichkeit, eine temporäre Tabelle mit Daten zwischen und einschließlich 2 Datumsparametern zu füllen

Dies funktioniert auch dann, wenn das @StartDate nicht der erste des Monats ist. Ich gehe davon aus, dass Sie, wenn es nicht der Monatsanfang ist, mit dem Ersten des nächsten Monats beginnen möchten. Entfernen Sie andernfalls das +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)