Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SQL SERVER - OBTENIR LA DATE DU DERNIER JOUR DU MOIS (GET LAST DAY OF MONTH).


Information sur la source

Catégorie :Fonctions Classé sous : getlastdayofmonth, lastday, dernier, jour, mois Niveau : Débutant Date de création : 21/03/2007 Date de mise à jour : 11/05/2007 09:01:57 Vu : 7 455

Note :
Aucune note

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

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

Source

  • 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
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


 

Historique

21 mars 2007 15:37:19 :
Err. manip. (tjs trop pressé)
03 avril 2007 13:41:20 :
Correction
05 avril 2007 10:09:42 :
Explication complémentaires
10 avril 2007 10:54:21 :
Simplification : « DATEADD(DAY, -DAY(@dte), DATEADD(MONTH, 1, @dte)) » est l'équivalent de « DATEADD(DAY, -1, DATEADD(MONTH, 1, DATEADD(DAY, 1-DAY(@Dte), @Dte))) ». Par contre, il importe de ne pas modifier l'ordre des opérations. Il faut d'abord ajouter un mois puis soustraire le nombre de jours.
10 avril 2007 12:49:38 :
Correction de la casse dans l'éventualité d'une prise en compte.
10 avril 2007 13:36:00 :
Mea culpa... la simplification n'est pas valide pour la borne supérieure (dernier jour du mois passé en paramètre).
10 avril 2007 13:42:30 :
Ponctuation
11 mai 2007 09:01:57 :
Ajout de l'algo. simplifié : GetLastDay (dernier jour du mois sans gestion de l'heure).

Commentaires et avis

signaler à un administrateur
Commentaire de Chrysostome le 26/03/2007 20:02:05

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).

signaler à un administrateur
Commentaire de FENETRES le 27/03/2007 13:44:58

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.

signaler à un administrateur
Commentaire de FENETRES le 20/04/2007 18:08:17

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

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

le dernier jours d'un mois [ par g_fuck ] salut !!!je sais pas si je devrais pauser ma question ici ....   J'aimerais savoir si il existe une fonction pour trouver le dernier jours d'un mois . Mise à jour des dates de durée [ par jg_444 ] Bonjour,J'ai une base de donnée Sybase pour garder trace de mes formations et compétences.Lorsque je fais une mise à jour de la durée d'une compétence Problème de mise à jour access [ par fzf ] Bonjour,J'ai effectué une mise à jour mais lorsque j'exécute celle ci le message "Erreur de syntaxe (opérateur absent) dans l'expression "COUNT(Sélect Pb sur jointure dans update dans access 2003 [ par lecourty ] Boujour,J'ai deux tables TABLE1 et TABLE2numero, maxi                     N1, N2, N31            0                        19    7      42            0 Lociciel develloper en C++ et incrementation de base MYSQL [ par davidb1967 ] Bonjour,A partir d'un logiciel que j'ai fait developper (traitement et mise en ligne de photo).Qui pourrais me dire quel sont les differente methode d probleme mis à jour [ par fetsa054 ] bonjour à tous, je développe une application vb.net sous vs2008 qui gère une base de données Access,dans le programme je fais une requete UPDATE qui table dans base de donnée avec mise à jour de colonne [ par lsamsoumal ] Bonjour tout le monde. dans une base de données mysql je veux créer une table presence qui contient 3 colonnes: utilisateur,date/heure et evenement. Requete SQL - 3 mois glissants [ par bbertt ] Avant toutes choses, Bonjour a tousJe tiens à vous remercier car le forum m'a permis de répondre à une grande quantité de questions durant mon stage.C mise à jour de table [ par belgariel ] Bonjour, Je travaille actuellement sur sql serveur 2000 et je dois mettre à jour une base de donnée en ajoutant des champs à une table. Le problème es Probleme Replication de fusion Mise a jour table [ par j2bond2 ] Bonjourj'ai un serveur distant sous SQL SERVER EXPRESS et un serveur local sous SQL SERVER 2005 et je souhaite mettre a jour une table sur le site dis


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,624 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.