SQL SERVER - OBTENIR LA DATE DU DERNIER JOUR DU MOIS (GET LAST DAY OF MONTH).
Chrysostome
Messages postés121Date d'inscriptionvendredi 17 octobre 2003StatutMembreDernière intervention14 octobre 2016
-
26 mars 2007 à 20:02
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009
-
20 avril 2007 à 18:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009 20 avril 2007 à 18:08
L'algo. est plus simple si vous n'avez pas besoin de gérer l'heure (cf. ci-dessous).
CREATE FUNCTION [dbo].[GetLastDayOfMonth](@Dte DATETIME, @AtMidnight BIT)
RETURNS DATETIME
/* Retourne la date du dernier jour du mois sans gestion de l'heure.
Tests :
Select dbo.GetLastDayOfMonth(Cast('01/02/2007 12:20:49.250' As DateTime))>>2007-02-28 12:20:49.250
Select dbo.GetLastDayOfMonth(Cast('10/02/2007 12:20:49.250' As DateTime))>>2007-02-28 12:20:49.250
Select dbo.GetLastDayOfMonth(Cast('28/02/2007 12:20:49.250' As DateTime))>>2007-02-28 12:20:49.250
*/
BEGIN
SET @Dte=DATEADD(MONTH, 1, @Dte)
RETURN DATEADD(DAY, -DAY(@Dte), @Dte)
END
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009 27 mars 2007 à 13:44
Effectivement, cette source n'aurait que très peu intérêt (hormis algorithme moins trivial) si elle ne proposait pas la gestion de l'heure.
Chrysostome
Messages postés121Date d'inscriptionvendredi 17 octobre 2003StatutMembreDernière intervention14 octobre 2016 26 mars 2007 à 20:02
C'est un problème récurrant. Nous avons une solution logique simple: Le dernier jour du mois est celui qui précède le 1er jour du mois suivant.
C'est à dire: dernier jour de Février = (1er Mars - 1 jour).
20 avril 2007 à 18:08
CREATE FUNCTION [dbo].[GetLastDayOfMonth](@Dte DATETIME, @AtMidnight BIT)
RETURNS DATETIME
/* Retourne la date du dernier jour du mois sans gestion de l'heure.
Tests :
Select dbo.GetLastDayOfMonth(Cast('01/02/2007 12:20:49.250' As DateTime))>>2007-02-28 12:20:49.250
Select dbo.GetLastDayOfMonth(Cast('10/02/2007 12:20:49.250' As DateTime))>>2007-02-28 12:20:49.250
Select dbo.GetLastDayOfMonth(Cast('28/02/2007 12:20:49.250' As DateTime))>>2007-02-28 12:20:49.250
*/
BEGIN
SET @Dte=DATEADD(MONTH, 1, @Dte)
RETURN DATEADD(DAY, -DAY(@Dte), @Dte)
END
27 mars 2007 à 13:44
26 mars 2007 à 20:02
C'est à dire: dernier jour de Février = (1er Mars - 1 jour).