Dans MariaDB, YEARWEEK()
est une fonction de date et d'heure intégrée qui renvoie l'année et la semaine pour une date donnée.
Il accepte deux arguments ; la date dont vous souhaitez extraire l'année et la semaine, et un argument de mode facultatif pour spécifier le mode à utiliser dans le résultat.
Il renvoie la semaine sous la forme d'un nombre dans la plage 0
à 53
ou 1
à 53
, selon le mode utilisé. De plus, l'année dans le résultat peut être différente de l'année dans l'argument de date pour la première et la dernière semaine de l'année.
Syntaxe
La syntaxe ressemble à ceci :
YEARWEEK(date), YEARWEEK(date,mode)
Qui pourrait aussi s'exprimer ainsi :
YEARWEEK(date[,mode])
Où date
est l'expression de date à partir de laquelle obtenir l'année et la semaine, et mode
est un argument facultatif qui vous permet de spécifier un mode à utiliser.
Modes
Le mode
facultatif L'argument détermine si la semaine commence le dimanche ou le lundi et si la valeur de retour doit être comprise entre 0
à 53
ou de 1
à 53
.
L'argument mode peut être l'un des suivants :
Mode | 1er jour de la semaine | Plage | La semaine 1 est la 1ère semaine avec… |
---|---|---|---|
0 | dimanche | 0-53 | un dimanche de cette année |
1 | Lundi | 0-53 | plus de 3 jours cette année |
2 | dimanche | 1-53 | un dimanche de cette année |
3 | Lundi | 1-53 | plus de 3 jours cette année (conformément à la norme ISO 8601:1988) |
4 | dimanche | 0-53 | plus de 3 jours cette année |
5 | Lundi | 0-53 | un lundi de cette année |
6 | dimanche | 1-53 | plus de 3 jours cette année |
7 | Lundi | 1-53 | un lundi de cette année |
Si l'argument mode est omis, la valeur du default_week_format
variable système est utilisée.
Vérifions la valeur de mon default_week_format
variable système :
SELECT @@default_week_format;
Résultat :
+-----------------------+| @@default_week_format |+-----------------------+| 0 |+-----------------------+
Maintenant, quand j'exécute YEARWEEK()
sans spécifier de mode, il utilisera le mode 0
.
Exemple
Voici un exemple d'appel de YEARWEEK()
sans préciser le mode :
SELECT YEARWEEK('2030-01-01');
Résultat :
+------------------------+| ANNEE SEMAINE('2030-01-01') |+------------------------+| 202952 |+-----------------------+
Dans ce cas, l'année et la semaine résultantes sont celles de l'année précédente.
Spécifiez un mode
Voici un exemple de spécification du mode :
SELECT YEARWEEK('2030-01-01', 1);
Résultat :
+---------------------------+| ANNEE SEMAINE('2030-01-01', 1) |+---------------------------+| 203001 |+-----------------------------------+
Cette fois, le résultat est différent.
Passons en revue tous les modes pour la même date :
SELECT
YEARWEEK('2030-01-01', 0),
YEARWEEK('2030-01-01', 1),
YEARWEEK('2030-01-01', 2),
YEARWEEK('2030-01-01', 3),
YEARWEEK('2030-01-01', 4),
YEARWEEK('2030-01-01', 5),
YEARWEEK('2030-01-01', 6),
YEARWEEK('2030-01-01', 7);
Résultat (en utilisant la sortie verticale) :
YEARWEEK('2030-01-01', 0) :202952YEARWEEK('2030-01-01', 1) :203001YEARWEEK('2030-01-01', 2) :202952YEARWEEK('2030-01-01 ', 3):203001ANNEE SEMAINE('2030-01-01', 4):203001ANNEE SEMAINE('2030-01-01', 5):202953ANNEE SEMAINE('2030-01-01', 6):203001ANNEE SEMAINE('2030-01 -01', 7):202953
Valeurs DateHeure
Le YEARWEEK()
la fonction fonctionne également avec les valeurs datetime :
SELECT YEARWEEK('2030-08-01 10:30:45');
Résultat :
+---------------------------------------------+| ANNEE SEMAINE('2030-08-01 10:30:45') |+--------------------------------- +| 203030 |+---------------------------------------------+
Dates numériques
Il est également possible de transmettre des dates sous forme de nombre, tant que cela a du sens en tant que date.
Exemple
SELECT YEARWEEK(20301125);
Résultat :
+--------------------+| ANNEE SEMAINE(20301125) |+--------------------+| 203047 |+--------------------+
Ou même le suivant (qui utilise une année à deux chiffres) :
SELECT YEARWEEK(301125);
Résultat :
+------------------+| ANNEE SEMAINE(301125) |+------------------------------+| 203047 |+-----------------+
Mais ça doit avoir un sens comme date. Voici ce qui se passe si j'augmente la partie jour à un jour non valide :
SELECT YEARWEEK(20301135);
Résultat :
+--------------------+| ANNEE SEMAINE(20301135) |+--------------------+| NULL |+--------------------+1 ligne dans l'ensemble, 1 avertissement (0.000 sec)
Il a renvoyé null
avec un avertissement.
Regardons l'avertissement :
SHOW WARNINGS;
Résultat :
+---------+------+---------------------------------- ---------+| Niveau | Codage | Message |+---------+------+------------------------------ --------+| Avertissement | 1292 | Valeur de date/heure incorrecte :'20301135' |+---------+------+------------------------ --------------+
Autres délimiteurs
Vous pouvez utiliser d'autres délimiteurs pour la date. MariaDB est assez indulgent en ce qui concerne les délimiteurs de dates. Voici quelques exemples valides :
SELECT
YEARWEEK('2030/06/25'),
YEARWEEK('2030,06,25'),
YEARWEEK('2030:06:25'),
YEARWEEK('2030;06!25');
Résultat (en utilisant la sortie verticale) :
YEARWEEK('2030/06/25') :203025YEARWEEK('2030,06,25') :203025YEARWEEK('2030:06:25') :203025YEARWEEK('2030;06!25') :203025Date actuelle
Nous pouvons passer
NOW()
comme argument datetime pour utiliser la date actuelle :SELECT NOW(), YEARWEEK(NOW());
Résultat :
+---------------------+-----------------+| MAINTENANT() | ANNEE SEMAINE(MAINTENANT()) |+---------------------+-----------------+| 2021-05-17 09:08:23 | 202120 |+---------------------+-----------------+Arguments invalides
Lorsqu'un argument invalide est passé,
YEARWEEK()
renvoienull
:SELECT YEARWEEK('2030-65-78');
Résultat :
+------------------------+| ANNEE SEMAINE('2030-65-78') |+------------------------+| NULL |+-----------------------+1 ligne dans l'ensemble, 1 avertissement (0.000 sec)Montrons l'avertissement :
SHOW WARNINGS;
Résultat :
+---------+------+---------------------------------- -----------+| Niveau | Codage | Message |+---------+------+------------------------------ ----------+| Avertissement | 1292 | Valeur datetime incorrecte :'2030-65-78' |+---------+------+-------------------- --------------------+Argument manquant
Appel de
YEARWEEK()
avec le mauvais nombre d'arguments, ou sans passer d'arguments, génère une erreur :SELECT YEARWEEK();
Résultat :
ERREUR 1582 (42000) :nombre de paramètres incorrect dans l'appel à la fonction native 'YEARWEEK'Et un autre exemple :
SELECT YEARWEEK('2030-12-10', 1, 2);
Résultat :
ERREUR 1582 (42000) :nombre de paramètres incorrect dans l'appel à la fonction native 'YEARWEEK'