Mauvais trip du calcul de numéro de semaine pour 2005

Mauvais trip du calcul de numéro de semaine pour 2005 - SQL/NoSQL - Programmation

Marsh Posté le 21-12-2004 à 14:51:10    

Hello tt le monde,
 
voilà j'aimerai récupérer le numéro de la semaine d'une date :
très simple avec notamment  
select datepart(ww,getdate())
 
Ca marchait bien en 2004 ...mais en 2005 ca part en vrille :
 
si je veux par exemple le numéro de la semaine du 07/01/2004, SQL Server me retourne la semaine numéro 2, alors que sur mon calendrier c'est la UNE.
La riason est probablement que le 1er janvier tombe un samedi..
 
Bref sous SQL server il indique d'utiliser le parametre DATEFIRST pour spécifier le premier jour de semaine
 
et bien quelque soit la valeur que j'y indique (possible de vérifier aec @@DATEFIRST)
mon 7 janvier tombe toujours en 2iè semaine, alors qu'il est en premiere semaine calendaire complete
 
Une idée comment réglé ce ptit probleme ? ou soit vais je devoir expliqué à tout mes gentils administrés qu'il va falloir mettre -1 derriere leur calcul de numéro de semaine ?
 
merci :)
(jai le meme probleme sous ACCESS)


---------------
Galerie Photo (Canon)
Reply

Marsh Posté le 21-12-2004 à 14:51:10   

Reply

Marsh Posté le 21-12-2004 à 20:36:21    

Les semaines commencent toujours un lundi, ou plutôt un dimanche dans certains pays ???
Parce que c'est peut-être un paramètre régional qui fait ça.

Reply

Marsh Posté le 04-01-2005 à 13:22:20    

Function WEEKNR(InputDate As Long) As Integer
'Joseph Rubin's Excel TIPS
'http://www.exceltip.com/show_tip/Custom_Functions/Weeknumbers_using_VBA_in_Microsoft_Excel/524.html
Dim A As Integer, B As Integer, C As Long, D As Integer
    WEEKNR = 0
    If InputDate < 1 Then Exit Function
    A = Weekday(InputDate, vbSunday)
    B = Year(InputDate + ((8 - A) Mod 7) - 3)
    C = DateSerial(B, 1, 1)
    D = (Weekday(C, vbSunday) + 1) Mod 7
    WEEKNR = Int((InputDate - C - 3 + D) / 7) + 1
End Function
 :sol:

Reply

Marsh Posté le 04-01-2005 à 14:30:53    

au pifomètre, essaie "select datepart(wi,getdate())"
 
Sous Oracle en tout cas, il y a une différence entre ww et wi, l'un étant "je sais pas quoi et j'en ai rien à foutre", et l'autre étant la semaine fiscale ISO.

Reply

Marsh Posté le 04-01-2005 à 15:02:12    

Hélas sous SQL "wi" n'existe pas  ...dommage j'y ai cru  un instant !
 
Sinon pour la solution de la formule, ca m'embete un peu à vrai dire de créer une fonction SQL non supportée
 
psa d'autre idée ?
 
(merci etk)


---------------
Galerie Photo (Canon)
Reply

Marsh Posté le 04-01-2005 à 15:18:47    

C'est chelou ton truc quand même, parceque là :
 
set datefirst 5
select datepart(ww, getdate())
 
5 = lundi sous SQL Server
 
J'utilise SQL Server 2000 Developpeur Edition Français sous Windows 2000 Professionel Français SP4 configuré en Français.

Reply

Marsh Posté le 04-01-2005 à 15:21:08    

Attends, j'ai rien dit... Je regarde un truc dans l'aide, set datefirst inpacte le dw du coup ça fait n'importe quoi :pt1cable:

Reply

Marsh Posté le 04-01-2005 à 15:24:19    

J'y panne plus rien :
 

Code :
  1. set datefirst 1
  2. select datepart(dw, '07/01/2004')
  3. -----------
  4. 3
  5. select datepart(ww, '07/01/2004')
  6. -----------
  7. 2


 
Alors là, moi faut qu'on m'explique :
 

Citation :


Entier indiquant le premier jour de la semaine. Il peut avoir l'une des valeurs suivantes :
 
Valeur Premier jour de la semaine  
1 Lundi  
2 Mardi  
3 Mercredi  
4 Jeudi  
5 Vendredi  
6 Samedi  
7 (par défaut, Anglais U.S.) Dimanche  


 
Je dit que le semaine commence au lundi, et ce con me dit que le 7 janvier est un... mercredi, alors que d'après Outlook, c'est bien un vendredi :pt1cable:
 
 
 
Heu... Arf ! Là moi je regarde 2004, pas 2005 :D
 
Bon, j'y retourne :ange:
 
PS: T'as pas intérêt à avoir fait la même connerie que moi hein ? :p


Message édité par Arjuna le 04-01-2005 à 15:25:31
Reply

Marsh Posté le 04-01-2005 à 15:25:31    

Bienvenue au club ! j'étais tout paumé aussi !
l'aide est zarb !


---------------
Galerie Photo (Canon)
Reply

Marsh Posté le 04-01-2005 à 15:34:18    

J'ai l'impression que SQL Server n'a pas de fonction "firstWeekOfYear", qui permet de dire si la première semaine est :
- La première série de 4 jours de l'année
- Le premier "firstWeekOfDay" de l'année
- La première semaine entière
 
J'ai beau chercher, c'est ni paramètrable dans SQL Server directement, ni dans T-SQL, ni sous Windows.
Vu que mon Office 2003 m'indique le bon numéro de semaine, j'en déduis que c'est pas un paramètré sur ma machine qui est foireux, mais bien SQL Server qui ne suit pas les paramètres de la machine.
 
T'as plus qu'à délocaliser le calcul du numéro de semaine dans le programme qui interroge la base, ou faire la fonction que préconnise rage44


Message édité par Arjuna le 04-01-2005 à 15:36:45
Reply

Marsh Posté le 04-01-2005 à 15:34:18   

Reply

Marsh Posté le 16-01-2005 à 17:42:24    

Hello,
 
J'ai le même problème, mais j'ai trouvé une solution nickel dans l'aide de SQL Server.
 
Il faut créer une fonction IsoWeek :
 
ALTER 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=dbo.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)=12) AND  
      ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
      SET @ISOweek=1
   RETURN(@ISOweek)
END
 
Et ensuite tu obtient ta valeur de semaine en l'appelant comme ça :
 
SET DATEFIRST 1
SELECT    dbo.IsoWEEK( GETDATE()) AS Semaine
 
Et là ça marche !
 
Nico

Reply

Marsh Posté le 18-05-2005 à 08:39:43    

Hello,
 
Il faut utiliser le format IYYYIW ainsi les 1er et 2 janvier 2005 seront sur la semaine 200453 et le lundi 3 janvier 2005 début la semaine 1 de l'année 2005.
 
to_char(DT, 'IYYYIW')
 
DT               TO_CHAR(DT,'IYYYIW')
01/01/2005        200453
02/01/2005        200453
03/01/2005        200501
04/01/2005        200501
05/01/2005        200501
.....
 
 :pt1cable:  
 
fecs

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed