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