begin process at 2010 03 16 17:34:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fonctions

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

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


 Information sur la source

Note :
Aucune note
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 :10 351

Auteur : FENETRES

Ecrire un message privé
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).

 Sources du même auteur

Source avec Zip Source avec une capture SQL SERVER - GENERATION AUTOMATIQUE D'UNE RETRO-DOCUMENTATIO...
Source avec Zip Source avec une capture SQL SERVER - PROCEDURE D'EDITION D'UN FICHIER PLAT (EXPORT C...
Source avec une capture SQL SERVER - TRANSMISSION D'UN PARAMETRE A VALEURS MULTIPLES
Source avec une capture SQL SERVER 2005 - GESTION DE LA LARGEUR DES COLONNES D'UNE R...
SQL SERVER - ADRESSE MAC ET NOM D'ORDINATEUR

 Sources de la même categorie

Source avec Zip CALCUL UNE DIFFÉRENCE DE DATE EN FONCTION DE JOURS FÉRIÉS/TR... par Sieurcoug
Source avec Zip CONVERSION DE NOMBRE EN LETTRES (SQL) par wormlore
NO HTML BALISE [MYSQL] par abdoulax
MYSQL : FONCTION POUR GÉRER DES COMPTEURS ÉQUIVALENT AUX SÉQ... par maitredede
RÉINDEXER TOUTES LES TABLES D'UNE BASE DE DONNÉES par pneau

 Sources en rapport avec celle ci

DERNIER JOUR DU MOIS, OU DE LA SEMAINE par pifou25
AJOUTEZ À VOTRE BD TOUS LES JOURS DE L'ANNÉE AINSI QUE LE SA... par mat2000fr

Commentaires et avis

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

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.

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


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales