OVH Cloud OVH Cloud

numérotation des semaines avec sql 2000

1 réponse
Avatar
Albert LAHMI
pas expert !!!
Quand on écrit
select datepart(ww,'01/01/2005')
SQL renvoie la réponse 1
alors que tous les calendriers nous disent que la semaine 1 commence le
lundi 3.
Le principe est (je crois) que pour être valide cette première semaine doit
comportée un jour ouvré non férié (voir 1999 commence par vendredi, la
semaine 1 commence le 4 janvier)
Pouvez m'indiquer si il existe un paramètre à rajouter à datepart ou une
autre fonction
ou un script qui analyse le 1er janvier de chaque année pour définir ensuite
une instruction conditionnelle.

1 réponse

Avatar
Fred BROUARD
vieux problème !!!!

Semaine US. Pour la semaine ISO utiliser la fonction :

Fonction utilisateur scalaire calculant la semaine ISO
Dans cet exemple, une fonction utilisateur, ISOweek, contient un argument date
et calcule le numéro de semaine ISO. Pour que ce calcul puisse être correctement
réalisé, SET DATEFIRST 1 doit être appelé avant la fonction.

CREATE FUNCTION ISOweek (@DATE datetime)
RETURNS int
AS
BEGIN
DECLARE @ISOweek int
SET @ISOweek= DATEPART(wk,@DATE)+1
-DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')
--Special cases: Jan 1-3 may belong to the previous year
IF (@ISOweek=0)
SET @ISOweekÛo.ISOweek(CAST(DATEPART(yy,@DATE)-1
AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
--Special case: Dec 29-31 may belong to the next year
IF ((DATEPART(mm,@DATE)) AND
((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
SET @ISOweek=1
RETURN(@ISOweek)
END

Voici l'appel de la fonction. Notez que DATEFIRST a pour valeur 1.

SET DATEFIRST 1
SELECT master.dbo.ISOweek('12/26/1999') AS 'ISO Week'


Extraite de l'aide en ligne de MS SQL Server.

A +

Albert LAHMI a écrit:
pas expert !!!
Quand on écrit
select datepart(ww,'01/01/2005')
SQL renvoie la réponse 1
alors que tous les calendriers nous disent que la semaine 1 commence le
lundi 3.
Le principe est (je crois) que pour être valide cette première semaine doit
comportée un jour ouvré non férié (voir 1999 commence par vendredi, la
semaine 1 commence le 4 janvier)
Pouvez m'indiquer si il existe un paramètre à rajouter à datepart ou une
autre fonction
ou un script qui analyse le 1er janvier de chaque année pour définir ensuite
une instruction conditionnelle.






--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************