Dans MySQL, vous pouvez utiliser le WEEK()
fonction pour obtenir le numéro de semaine pour une date donnée. Par "numéro de semaine", j'entends la semaine de l'année.
Pour utiliser la fonction, il suffit de fournir la date en argument et le numéro de la semaine sera renvoyé.
Vous avez également la possibilité de spécifier si vous souhaitez démarrer la semaine le dimanche ou le lundi, et si la semaine doit être comprise entre 0 et 53 ou entre 1 et 53.
Syntaxe
La syntaxe ressemble à ceci :
WEEK(date[,mode])
Où :
date
est la date à partir de laquelle vous voulez que le numéro de semaine soit renvoyé.mode
est un nombre qui spécifie si la semaine doit commencer le dimanche ou le lundi et si la semaine doit être comprise entre 0 et 53 ou entre 1 et 53. Consultez le tableau ci-dessous pour les valeurs de mode possibles.
Exemple 1 - Utilisation de base
Voici un exemple pour illustrer.
SELECT WEEK('2021-01-25') As 'Week Number';
Résultat :
+-------------+ | Week Number | +-------------+ | 4 | +-------------+
Voici un exemple avec une date proche de la fin de l'année.
SELECT WEEK('2021-12-25') As 'Week Number';
Résultat :
+-------------+ | Week Number | +-------------+ | 51 | +-------------+
Exemple 2 - Spécifier un mode
Si vous ne spécifiez pas de deuxième argument, le WEEK()
la fonction utilise le mode spécifié par le default_week_format
variable système. La valeur par défaut de cette variable est 0
.
Cependant, vous avez également la possibilité de fournir un deuxième argument pour spécifier le mode à utiliser. Exemple :
SELECT WEEK('2019-10-17', 7) AS 'Mode 7';
Résultat :
+--------+ | Mode 7 | +--------+ | 41 | +--------+
Les valeurs de mode possibles sont les suivantes.
Mode | Premier jour de la semaine | Plage | La semaine 1 est la première semaine … |
---|---|---|---|
0 | dimanche | 0-53 | avec un dimanche cette année |
1 | Lundi | 0-53 | avec 4 jours ou plus cette année |
2 | dimanche | 1-53 | avec un dimanche cette année |
3 | Lundi | 1-53 | avec 4 jours ou plus cette année |
4 | dimanche | 0-53 | avec 4 jours ou plus cette année |
5 | Lundi | 0-53 | avec un lundi cette année |
6 | dimanche | 1-53 | avec 4 jours ou plus cette année |
7 | Lundi | 1-53 | avec un lundi cette année |
Pour les valeurs de mode où la semaine 1 est la première semaine "avec 4 jours ou plus cette année", les semaines sont numérotées conformément à la norme ISO 8601:1988 :
- Si la semaine contenant le 1er janvier compte 4 jours ou plus dans la nouvelle année, il s'agit de la semaine 1.
- Sinon, c'est la dernière semaine de l'année précédente, et la semaine suivante est la semaine 1.
Exemple 3 - Comparaison des modes
Voici une comparaison rapide de la façon dont vous pouvez obtenir des résultats différents selon le mode utilisé.
Les trois exemples suivants utilisent le même code, mais avec trois dates différentes. Ces dates sont consécutives - elles se produisent les 5, 6 et 7 janvier. Comme vous pouvez le voir, les résultats peuvent être assez différents selon la date exacte et le mode utilisé.
Date 1
SET @date = '2019-01-05'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Résultat :
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 0 | 1 | 52 | 1 | 1 | 0 | 1 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
Date 2
SET @date = '2019-01-06'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Résultat :
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 1 | 1 | 1 | 2 | 0 | 2 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
Date 3
SET @date = '2019-01-07'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Résultat :
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 2 | 1 | 2 | 2 | 1 | 2 | 1 | +--------+--------+--------+--------+--------+--------+--------+--------+