Sql server - obtenir la date du dernier jour du mois (get last day of month).

Soyez le premier à donner votre avis sur cette source.

Snippet vu 30 913 fois - Téléchargée 19 fois

Contenu du snippet

UDF "GetLastDayOfMonth" pour obtenir la date du dernier jour du mois avec ou sans gestion de l'heure.

Source / Exemple :


CREATE FUNCTION [dbo].[GetLastDayOfMonth](@Dte DATETIME, @AtMidnight BIT)
RETURNS DATETIME
/* Retourne la date du dernier jour du mois avec ou sans gestion de l'heure.
Exemples d'utilisation :
Select dbo.GetLastDayOfMonth(Cast('05/02/2007 12:20:49.250' As DateTime), 1) >> 2002-02-28 00:00:00.000
Select dbo.GetLastDayOfMonth(Cast('05/02/2007 12:20:49.250' As DateTime), 0) >> 2007-02-28 23:59:59.997
Select dbo.GetLastDayOfMonth(Cast('05/02/2007 12:20:49.250' As DateTime), Null) >> 2007-02-28 12:20:49.250

  • /
BEGIN IF @AtMidnight= 0 RETURN DATEADD(MILLISECOND, -3, DATEADD(MONTH, DATEDIFF(MONTH, 0, @Dte) + 1, 0)) ELSE SET @Dte=DATEADD(DAY, -1, DATEADD(MONTH, 1, DATEADD(DAY, 1-DAY(@Dte), @Dte))); IF @AtMidnight= 1 RETURN CAST(CONVERT(CHAR(10), @Dte, 103) AS DATETIME); RETURN @Dte; END CREATE FUNCTION [dbo].[GetLastDay](@Dte DATETIME) RETURNS DATETIME /* Retourne la date du dernier jour du mois sans gestion de l'heure. Exemples d'utilisation (tests de validation) : 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

Conclusion :


Select Cast(0 As DateTime) retourne 1900-01-01 00:00:00.000
Select DATEADD(DAY, 1-DAY(@Dte), @Dte) retourne le premier jour du mois

A voir également

Ajouter un commentaire

Commentaires

Chrysostome
Messages postés
121
Date d'inscription
vendredi 17 octobre 2003
Statut
Membre
Dernière intervention
14 octobre 2016
-
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).
FENETRES
Messages postés
205
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
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.
FENETRES
Messages postés
205
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.