Mauvais trip du calcul de numéro de semaine pour 2005 - SQL/NoSQL - Programmation
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.
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
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.
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)
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.
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
Marsh Posté le 04-01-2005 à 15:24:19
J'y panne plus rien :
Code :
|
Alors là, moi faut qu'on m'explique :
Citation : |
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
Heu... Arf ! Là moi je regarde 2004, pas 2005
Bon, j'y retourne
PS: T'as pas intérêt à avoir fait la même connerie que moi hein ?
Marsh Posté le 04-01-2005 à 15:25:31
Bienvenue au club ! j'étais tout paumé aussi !
l'aide est zarb !
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
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
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
.....
fecs
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)