Comment find la collection de dates entre deux dates dans SQL Server pour la délinquance de messagerie?

Je dois get la collection de date de chaque mois entre deux dates. Je n'ai plus d'idée en détail pour SQL Server.

Exemple 1:

Si ma date de début est '01 / 20/2017 '(MM / jj / aaaa) et que la date de fin est '12 / 20/2017' (MM / jj / aaaa) que le résultat attendu devrait être comme indiqué ci-dessous.

2017-01-20 2017-02-20 2017-03-20 2017-04-20 2017-05-20 2017-06-20 2017-07-20 2017-08-20 2017-09-20 2017-10-20 2017-11-20 2017-12-20 

Exemple 2:

Si ma date de début est '01 / 30/2017 '(MM / jj / aaaa) et que la date de fin est '12 / 20/2017' (MM / jj / aaaa) que le résultat attendu devrait être comme indiqué ci-dessous.

Dans cet exemple, StartDate est '01 / 30/2017 'pour le mois de février il n'y a pas de 30ème date en calandar donc j'ai besoin de la dernière date de ce mois. Si une année bissextile se situe dans la plage de ces dates données à la 29e date sera dans le jeu de résultats.

Résultat attendu

 2017-01-30 2017-02-28 2017-03-30 2017-04-30 2017-05-30 2017-06-30 2017-07-30 2017-08-30 2017-09-30 2017-10-30 2017-11-30 

Merci d'avance.

S'il vous plaît essayez la solution ci-dessous. Il suffit de définir MinDate et MaxDate selon vos besoins. Veuillez également vérifier la date du mois de février au cas où MinDate sera 30 ou 31.

 DECLARE @MinDate datetime, @MaxDate datetime SELECT @MinDate = '01/30/2017', @MaxDate = '12/17/2020' DECLARE @FilteredDate DATETIME = GETDATE(); ;WITH CTE AS ( SELECT TOP (DATEDIFF(MONTH, @MinDate, @MaxDate) + 1) DATEADD(MONTH, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate) AS CurrentDate FROM sys.all_objects a CROSS JOIN sys.all_objects b ) SELECT * FROM CTE WHERE CurrentDate > CONVERT(DATE, @FilteredDate) AND CurrentDate <= CONVERT(DATE, @MaxDate) ORDER BY CurrentDate ASC