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'):25 Date 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() renvoie null :
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 1
Et 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