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

Comment WEEK() fonctionne dans MariaDB

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]) 

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