Dans MariaDB, WEEK()
est une fonction de date et d'heure intégrée qui renvoie la semaine à partir d'une expression de date donnée.
Il accepte deux arguments ; la date à partir de laquelle vous souhaitez extraire 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é.
Syntaxe
La syntaxe ressemble à ceci :
WEEK(date[,mode])
Où date
est l'expression de date à partir de laquelle obtenir 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 je lance WEEK()
sans spécifier de mode, il utilisera le mode 0
.
Exemple
Voici un exemple d'appel de WEEK()
sans préciser le mode :
SELECT WEEK('2030-01-01');
Résultat :
+--------------------+| SEMAINE('2030-01-01') |+--------------------+| 0 |+--------------------+
Spécifiez un mode
Voici un exemple de spécification du mode :
SELECT WEEK('2030-01-01', 1);
Résultat :
+-----------------------+| SEMAINE('2030-01-01', 1) |+-----------------------+| 1 |+-----------------------+
Cette fois, le résultat est 1
au lieu de 0
.
Passons en revue tous les modes pour la même date :
SELECT
WEEK('2030-01-01', 0),
WEEK('2030-01-01', 1),
WEEK('2030-01-01', 2),
WEEK('2030-01-01', 3),
WEEK('2030-01-01', 4),
WEEK('2030-01-01', 5),
WEEK('2030-01-01', 6),
WEEK('2030-01-01', 7);
Résultat (en utilisant la sortie verticale) :
SEMAINE('2030-01-01', 0):0SEMAINE('2030-01-01', 1):1SEMAINE('2030-01-01', 2):52SEMAINE('2030-01-01 ', 3):1SEMAINE('2030-01-01', 4):1SEMAINE('2030-01-01', 5):0SEMAINE('2030-01-01', 6):1SEMAINE('2030-01 -01', 7):53
Valeurs DateHeure
La WEEK()
la fonction fonctionne également avec les valeurs datetime :
SELECT WEEK('2030-08-01 10:30:45');
Résultat :
+-----------------------------+| SEMAINE('2030-08-01 10:30:45') |+-----------------------------+| 30 |+----------------------------+
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 WEEK(20301125);
Résultat :
+----------------+| SEMAINE(20301125) |+----------------+| 47 |+----------------+
Ou même le suivant (qui utilise une année à deux chiffres) :
SELECT WEEK(301125);
Résultat :
+--------------+| SEMAINE(301125) |+----------------------+| 47 |+--------------+
Mais ça doit avoir un sens comme date. Voici ce qui se passe si j'augmente la partie jour à un jour non valide :
SELECT WEEK(20301135);
Résultat :
+----------------+| SEMAINE(20301135) |+----------------+| NULL |+----------------+1 ligne dans l'ensemble, 1 avertissement (0,001 s)
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
WEEK('2030/06/25'),
WEEK('2030,06,25'),
WEEK('2030:06:25'),
WEEK('2030;06!25');
Résultat (en utilisant la sortie verticale) :
SEMAINE('2030/06/25'):25SEMAINE('2030,06,25'):25SEMAINE('2030:06:25'):25SEMAINE('2030;06!25'):25Date actuelle
Nous pouvons passer
NOW()
comme argument datetime pour utiliser la date actuelle :SELECT NOW(), WEEK(NOW());
Résultat :
+---------------------+-------------+| MAINTENANT() | SEMAINE(MAINTENANT()) |+---------------------+----------------------+| 2021-05-17 08:36:12 | 20 |+---------------------+-------------+Arguments invalides
Lorsqu'un argument invalide est passé,
WEEK()
renvoienull
:SELECT WEEK('2030-65-78');
Résultat :
+--------------------+| 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
WEEK()
avec le mauvais nombre d'arguments, ou sans passer d'arguments, génère une erreur :SELECT WEEK();
Résultat :
ERROR 1064 (42000) :vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MariaDB pour la bonne syntaxe à utiliser près de ')' à la ligne 1Et un autre exemple :
SELECT WEEK('2030-12-10', 1, 2);
Résultat :
ERROR 1064 (42000) :vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MariaDB pour la bonne syntaxe à utiliser près de ' 2)' à la ligne 1