Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Truc de OUF !!!

2 réponses
Avatar
Synopsis
Les systèmes informatiques (SQL, XL, VBS, PHP,....) renvoie la semaine
(grégorienne) 23 pour aujourd'hui.
Et d'après les almanachs ou les agendas donnés généreusement par les banques
et autres partenaires, on serait en semaine 22.

La premiere semaine de l'année 2005 est une semaine 52, soit le prolongement
de l'année 2004 !!!
, dans les agendas adoptés par les banques.

select datepart(wk, getdate())

Comment je fais ?

- J'ai des utilisateurs qui saisissent 22, le système retourne les données
de la semaine 23...
- La relation d'ordre dans les semaines est violé (S52 < S01< S02 < ...
!!!! ) dans les agendas adoptés par les banques.
- J'ai deux semaines 52 !!!

Truc de OUF !!!

2 réponses

Avatar
Fred BROUARD
Pas truc de ouf, mais logique et documentation.

A lire l'aide en ligne sur DATEPART :
"
L'élément de date semaine (wk, ww) reflète les modifications apportées à SET
DATEFIRST. Le 1er janvier d'une année définit le nombre de départ de l'élément
de date semaine, par exemple : PARTIE_DE_DATE(wk, 'Jan 1, xxxx') = 1, avec xxxx
représentant une année quelconque.
"
En revanche le n° de semaine répond à la norme ISO, comme je l'ai indiqué ici :
http://sqlpro.developpez.com/cours/gestiontemps/
paragraphe Préambule, note de fin.

Pour une UDF qui calcule la date ISO :
"
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
"


A +

PS : extraits © Microsoft

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************


Synopsis a écrit:
Les systèmes informatiques (SQL, XL, VBS, PHP,....) renvoie la semaine
(grégorienne) 23 pour aujourd'hui.
Et d'après les almanachs ou les agendas donnés généreusement par les banques
et autres partenaires, on serait en semaine 22.

La premiere semaine de l'année 2005 est une semaine 52, soit le prolongement
de l'année 2004 !!!
, dans les agendas adoptés par les banques.

select datepart(wk, getdate())

Comment je fais ?

- J'ai des utilisateurs qui saisissent 22, le système retourne les données
de la semaine 23...
- La relation d'ordre dans les semaines est violé (S52 < S01< S02 < ...
!!!! ) dans les agendas adoptés par les banques.
- J'ai deux semaines 52 !!!

Truc de OUF !!!










Avatar
Synopsis
MERCI ;-))

"Fred BROUARD" a écrit dans le message de
news:
Pas truc de ouf, mais logique et documentation.

A lire l'aide en ligne sur DATEPART :
"
L'élément de date semaine (wk, ww) reflète les modifications apportées à


SET
DATEFIRST. Le 1er janvier d'une année définit le nombre de départ de


l'élément
de date semaine, par exemple : PARTIE_DE_DATE(wk, 'Jan 1, xxxx') = 1, avec


xxxx
représentant une année quelconque.
"
En revanche le n° de semaine répond à la norme ISO, comme je l'ai indiqué


ici :
http://sqlpro.developpez.com/cours/gestiontemps/
paragraphe Préambule, note de fin.

Pour une UDF qui calcule la date ISO :
"
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
"


A +

PS : extraits © Microsoft

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************


Synopsis a écrit:
> Les systèmes informatiques (SQL, XL, VBS, PHP,....) renvoie la semaine
> (grégorienne) 23 pour aujourd'hui.
> Et d'après les almanachs ou les agendas donnés généreusement par les


banques
> et autres partenaires, on serait en semaine 22.
>
> La premiere semaine de l'année 2005 est une semaine 52, soit le


prolongement
> de l'année 2004 !!!
> , dans les agendas adoptés par les banques.
>
> select datepart(wk, getdate())
>
> Comment je fais ?
>
> - J'ai des utilisateurs qui saisissent 22, le système retourne les


données
> de la semaine 23...
> - La relation d'ordre dans les semaines est violé (S52 < S01< S02 < ...
> !!!! ) dans les agendas adoptés par les banques.
> - J'ai deux semaines 52 !!!
>
> Truc de OUF !!!
>
>
>
>
>
>
>
>