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

Fonctionnement de YEARWEEK() dans MariaDB

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

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') :203025 

Date 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() renvoie null :

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'