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 !

DERNIER JOUR DU MOIS, OU DE LA SEMAINE


Information sur la source



Description

J'ai mis ces fonctions toujour utiles dans CODIX (les snippets) mais l'un est faut et on peut pas le corriger la bas... alors je le poste ici, corrigé :)
2 fonctions, 1 pour le dernier jour du mois, l'autre pour le dernier jour de la semaine.
Ha, aussi je reposte celle pour les années bissextiles ^^ ça mange pas de pain :)
 

Source

  • CREATE FUNCTION [dbo].[Last_Day] (@date AS datetime)
  • RETURNS datetime
  • AS
  • BEGIN
  • set @date = DATEADD(DAY, 1-DAY(@date), @date)
  • set @date = DATEADD(MONTH, 1, @date)
  • return DATEADD(DAY, -1, @date)
  • END
  • CREATE FUNCTION [Last_Week_Day] (@date AS datetime)
  • RETURNS datetime
  • AS
  • BEGIN
  • return DATEADD(DAY, 7-DatePart(DW, @date), @date)
  • END
  • CREATE FUNCTION [IsLeapYear] (@Annee AS int)
  • RETURNS bit
  • AS
  • BEGIN
  • Declare @Date29Fev AS Datetime
  • Declare @Result AS bit
  • SET @Date29Fev = DATEADD(DAY, -1, Cast('01/03/'+Cast(@Annee AS varchar(4)) AS datetime))
  • IF Day(@Date29Fev )=29
  • SET @Result =1
  • ELSE
  • SET @Result = 0
  • return @Result
  • END
CREATE FUNCTION [dbo].[Last_Day] (@date AS datetime) 
RETURNS datetime
AS
BEGIN
	set @date = DATEADD(DAY, 1-DAY(@date), @date)
	set @date = DATEADD(MONTH, 1, @date)
	return DATEADD(DAY, -1, @date)
END


CREATE FUNCTION [Last_Week_Day] (@date AS datetime) 
RETURNS datetime
AS
BEGIN
	return DATEADD(DAY, 7-DatePart(DW, @date), @date)
END


CREATE FUNCTION [IsLeapYear] (@Annee AS int) 
RETURNS bit
AS
BEGIN
	Declare @Date29Fev AS Datetime
	Declare @Result AS bit
	SET @Date29Fev  = DATEADD(DAY, -1, Cast('01/03/'+Cast(@Annee AS varchar(4)) AS datetime))
	IF Day(@Date29Fev )=29	
		SET @Result =1
	ELSE
		SET @Result = 0

	return @Result
END

Conclusion

Remarque pour Last_Day : obligatoire de faire 3 étapes
parce que en 1 seule étape y'a forcément des cas où ça buggue:

SELECT DATEADD(DAY, -DAY(@date), DATEADD(MONTH, 1, @date))
'30/01/2006' +1mois => '29/02/2006' -29jours => '29/01/2006' au lieu de '31/01/2006' attendu!
Mais si l'on procède dans l'autre sens:
SELECT DATEADD( MONTH, 1, DATEADD(DAY, -DAY(@date), @date))
'03/03/2006' -3jours => '28/02/2006' +1mois => '28/03/2006' au lieu de '31/03/2006'
En effet la fonction DATEADD est intelligente (heureusement)

 

Commentaires et avis

signaler à un administrateur
Commentaire de skweeky le 06/04/2007 20:31:27 administrateur CS

Attention au format de date : le JJ/MM/AAAA ne fonctionne que si la langue du compte avec laquelle on se connecte est french (et quelques autres).
Les 2 seuls formats universels dans SQL Server :
  'AAAAMMJJ HH:mm:SS.mms'
  'AAAA-MM-JJTHH:mm:SS.mms'

signaler à un administrateur
Commentaire de FENETRES le 03/05/2007 14:17:03

Et, pour cet exemple, crois-tu que cela bogue ?

CREATE FUNCTION [dbo].[GetLastDayOfMonth](@Dte As Datetime)
RETURNS DATETIME
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

Comment recuperer la date du 1er jour de la semaine ?? [ par sosou80 ] Bonjour tous le monde ,Voila mon petit probléme : j'ai une table temporaire construite dans une procédure stockée comme suit:#tab_temp( Jour,Mois,Anné 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 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 . VB.net 2005 et SQL 2005 Express : Prbl DateTime [ par morleys ] Bonjour à vous tous,Je coince voilà quelque temps sur un probleme d'enregistrement de date SQL 2005.Si j'ai toto = Cdate(Now())  & requete date [ par Rjoe ] bonjour ma question est la suivantedans mon aplication je souhaite faire une verification pour un mois courant ,or, il se peut que ce mois soit f Pb Date (1ère semaine de l'année) [ par Herminator ] Bonjour à tous, J'ai un petit problème de date, lorsque j'exécute la requête suivante : SELECT DATEPART(ww,GETDATE()), GETDATE() Encore un problème de dates avec MySQL [ par ImmortalPC ] Salut, je deviens fou avec mon calendrier J' ai une date de commencement et une date de fin respectivement : date_start et date_end Leur type : datet requete avec date [ par nawal59 ] salut,SELECT Table1.Aide, Table1.NumDossier, Table1.TypeDemAccomp,Table1.dateFicheEtabli, Table1.date1ercontact, Table1.nom, Table1.nomJeuneFille, Tab problème de Date lorsque l'intervalle est à cheval sur 2 mois... [ par nico_ayci ] salut à tous ! j'ai une fonctionnalité de recherche qui donne la possibilité de trouver des enregistrements selon leur date, à plu Dernier enregistrement de chaque membre [ par Seb33300 ] BonjourJe cherche a récupérer le dernier enregistrement de chaque membre sur un table de la forme :TABLE(#membre, date, msg)Il fdaudrais donc ainsi po


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

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



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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,374 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é.