Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1413 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°929204
Styx0
Aware, abware !
Posté le 21-12-2004 à 14:51:10  profilanswer
 

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)
mood
Publicité
Posté le 21-12-2004 à 14:51:10  profilanswer
 

n°929487
Beegee
Posté le 21-12-2004 à 20:36:21  profilanswer
 

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.

n°936563
rage44
Posté le 04-01-2005 à 13:22:20  profilanswer
 

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:

n°936641
Arjuna
Aircraft Ident.: F-MBSD
Posté le 04-01-2005 à 14:30:53  profilanswer
 

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.

n°936695
Styx0
Aware, abware !
Posté le 04-01-2005 à 15:02:12  profilanswer
 

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)
n°936721
Arjuna
Aircraft Ident.: F-MBSD
Posté le 04-01-2005 à 15:18:47  profilanswer
 

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.

n°936724
Arjuna
Aircraft Ident.: F-MBSD
Posté le 04-01-2005 à 15:21:08  profilanswer
 

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:

n°936730
Arjuna
Aircraft Ident.: F-MBSD
Posté le 04-01-2005 à 15:24:19  profilanswer
 

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
n°936735
Styx0
Aware, abware !
Posté le 04-01-2005 à 15:25:31  profilanswer
 

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


---------------
Galerie Photo (Canon)
n°936743
Arjuna
Aircraft Ident.: F-MBSD
Posté le 04-01-2005 à 15:34:18  profilanswer
 

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
mood
Publicité
Posté le 04-01-2005 à 15:34:18  profilanswer
 

n°953972
Nico_NGRI
Posté le 16-01-2005 à 17:42:24  profilanswer
 

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

n°1087419
fecs
Posté le 18-05-2005 à 08:39:43  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 

Sujets relatifs
FOSDEM 2005Delphi 2005 architect TRIAL (US)
Arbre, calcul du nombre de "coup" pour une rechercheOPTIMISATION D'ALGO POUR LE TEMPS DE CALCUL
probleme avec calcul exponentielfonction exponentielle mauvais résultat
comment changer le jour de debut de semaine sql[Topic officiel] Scilab logiciel de calcul puissant et FREE!!!
Requete mysql / where selection par semaine ???Delphi 2005 !
Plus de sujets relatifs à : Mauvais trip du calcul de numéro de semaine pour 2005


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR