Mysql
 sql >> Base de données >  >> RDS >> Mysql

WEEK() Exemples – MySQL

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 |
+--------+--------+--------+--------+--------+--------+--------+--------+