Bonjour,

Je rencontre un petit souci avec des dates avec des numéros de semaine. Voici mon code initial :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
declare @semaine int
declare @annee int
 
SET @semaine = 1
set @annee = 2020
 
IF @Semaine = 53 
(select * from menu where datepart(wk,date_repas) = @semaine and year(date_repas) = @annee and heure = 1 
union
select * from menu where datepart(wk,date_repas) = 1 and year(date_repas) = @annee + 1 and heure = 1)
else if @Semaine = 1
(
select * from menu where datepart(wk,date_repas) = @semaine and year(date_repas) = @annee and heure = 1 
union
select * from menu where datepart(wk,date_repas) = 53 and year(date_repas) = @annee - 1 and heure = 1
)
else
select * from menu where datepart(wk,date_repas) = @semaine and year(date_repas) = @annee and heure = 1
Voici les résultats :

Nom : ex1.PNG
Affichages : 793
Taille : 10,6 Ko

Pour le passage d'une année de 52 semaines à la suivante, pas de souci. Par contre, pour l'année qui compte 53 semaines, j'ai un souci, puisque que mes semaines 53 et 1 sont les mêmes. Et on voit ensuite que toute l'année est décalée, la semaine 2 commençant normalement le 11/01/2020. J'ai donc cherché et trouvé le "iso_week" au lieu du "wk".

Le nouveau code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
declare @semaine int
declare @annee int
 
SET @semaine = 1
set @annee = 2020
 
IF @Semaine = 53 
(select * from menu where datepart(wk,date_repas) = @semaine and year(date_repas) = @annee and heure = 1 
union
select * from menu where datepart(wk,date_repas) = 1 and year(date_repas) = @annee + 1 and heure = 1)
else if @Semaine = 1
(
select * from menu where datepart(wk,date_repas) = @semaine and year(date_repas) = @annee and heure = 1 
union
select * from menu where datepart(wk,date_repas) = 53 and year(date_repas) = @annee - 1 and heure = 1
)
else
select * from menu where datepart(iso_week,date_repas) = @semaine and year(date_repas) = @annee and heure = 1
Et le résultat :
Nom : ex2.PNG
Affichages : 753
Taille : 10,3 Ko

Cette fois-ci, ma semaine 2 est correcte.
Par contre, ma semaine 1 n'est toujours pas correcte. Pour qu'elle soit correcte, il suffit de lui appliquer le dernier select, avec l'iso_week. Et donc du coup, d'enlever le if. Sauf que ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
declare @semaine int
declare @annee int
 
SET @semaine = 52
set @annee = 2019
 
IF @Semaine = 53 
(select * from menu where datepart(wk,date_repas) = @semaine and year(date_repas) = @annee and heure = 1 
union
select * from menu where datepart(wk,date_repas) = 1 and year(date_repas) = @annee + 1 and heure = 1)
else
select * from menu where datepart(iso_week,date_repas) = @semaine and year(date_repas) = @annee and heure = 1
Me donne :
Nom : ex3.PNG
Affichages : 746
Taille : 10,7 Ko
Avec ma semaine 1 en 2020 qui n'est pas correct.

J'ai donc remis le "if @Semaine = 1" et j'ai testé toutes les combinaisons possibles de wk/iso_week, mais rien à faire, je n'arrive pas à obtenir une semaine 1 correcte en 2021 de cette manière, il faut que je passe par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
select * from menu where datepart(iso_week,date_repas) = @semaine and year(date_repas) = @annee and heure = 1
pour que cette semaine soit complète.

Du coup, vous l'aurez compris, je suis perdu. Ce que je souhaite, c'est simplement, à partir d'un couple semaine/année récupérer les dates de la semaine dans ma table.
Est-ce qu'il y a un moyen de faire cela ?

Je vous remercie par avance pour l'attention que vous voudrez bien accorder à ma problématique.