Dernier jour du mois, ou de la semaine

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 717 fois - Téléchargée 20 fois

Contenu du snippet

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 / Exemple :


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)

A voir également

Ajouter un commentaire Commentaires
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
3 mai 2007 à 14:17
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
cs_skweeky Messages postés 259 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 11 janvier 2010 8
6 avril 2007 à 20:31
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'

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.