Bonjour,
Je rencontre un petit souci avec des dates avec des numéros de semaine. Voici mon code initial :
Voici les résultats :
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
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 :
Et le résultat :
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
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 :
Me donne :
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
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 :pour que cette semaine soit complète.
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
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.
Partager