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

Exemples ANNEE() – MySQL

Dans MySQL, YEAR() est une fonction de date et d'heure intégrée qui renvoie l'année à partir d'une expression de date donnée.

Il renvoie l'année sous la forme d'un nombre dans la plage 1000 à 9999 . Pour les dates nulles, il pourrait renvoyer 0 ou NULL avec un avertissement, selon les valeurs de votre sql_mode .

Syntaxe

La syntaxe ressemble à ceci :

YEAR(date) 

date est l'expression de date à partir de laquelle obtenir l'année.

Exemple

Voici un exemple :

SELECT YEAR('2045-12-10'); 

Résultat :

2045

Valeurs DateHeure

Cela fonctionne également avec les valeurs datetime :

SELECT YEAR('2045-12-10 18:52:17'); 

Résultat :

2045

Dates zéro

Selon la documentation MySQL, zéro date donne 0 . Cependant, le résultat réel dépendra de la valeur de votre sql_mode variable système.

Par défaut, les dates zéro ne sont pas autorisées, et par conséquent, faire ce qui suit produit NULL avec un avertissement :

SELECT YEAR('0000-00-00'); 

Résultat :

+--------------------+| ANNEE('0000-00-00') |+--------------------+| NULL |+--------------------+1 ligne dans l'ensemble, 1 avertissement (0.00 sec)

Et voici l'avertissement :

show warnings; 

Résultat :

+---------+------+---------------------------------- -----------+| Niveau | Codage | Message |+---------+------+------------------------------ ----------+| Avertissement | 1292 | Valeur datetime incorrecte :'0000-00-00' |+---------+------+-------------------- --------------------+

J'ai reçu cet avertissement parce que mon sql_mode la variable système inclut NO_ZERO_DATE et NO_ZERO_IN_DATE :

SELECT @@SESSION.sql_mode; 

Résultat :

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Réinitialisons mon sql_mode sans ces valeurs :

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SELECT @@SESSION.sql_mode; 

Résultat :

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Exécutons maintenant le YEAR() fonctionner à nouveau avec la date zéro :

SELECT YEAR('0000-00-00'); 

Résultat :

0

Cette fois, nous obtenons 0 , selon la documentation.

Notez que NO_ZERO_DATE et NO_ZERO_IN_DATE sont obsolètes au moment de la rédaction. Par conséquent, ils peuvent être supprimés à tout moment.

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 YEAR(20451210); 

Résultat :

2045

Ou même le suivant (qui utilise une année à deux chiffres) :

SELECT YEAR(451210); 

Résultat :

2045

Mais ça doit avoir un sens comme date. Voici ce qui se passe si j'augmente la partie jour à un jour non valide :

SELECT YEAR(20451265); 

Résultat :

+----------------+| ANNEE(20451265) |+----------------+| NULL |+----------------+1 ligne dans l'ensemble, 1 avertissement (0.00 sec)

Nous pouvons vérifier l'avertissement comme ceci :

show warnings; 

Résultat :

+---------+------+---------------------------------- ---------+| Niveau | Codage | Message |+---------+------+------------------------------ --------+| Avertissement | 1292 | Valeur de date/heure incorrecte :'20451265' |+---------+------+------------------------ --------------+

Autres délimiteurs

Vous pouvez utiliser d'autres délimiteurs pour la date. MySQL est assez indulgent en ce qui concerne les délimiteurs de dates. Voici quelques exemples valides :

SELECT 
    YEAR('2045/12/10'),
    YEAR('2045,12,10'),
    YEAR('2045:12:10'),
    YEAR('2045;12!10'); 

Résultat (en utilisant la sortie verticale) :

ANNEE('2045/12/10'):2045ANNEE('2045,12,10'):2045ANNEE('2045:12:10'):2045ANNEE('2045;12!10'):2045 

Date actuelle

Nous pouvons passer NOW() comme argument datetime pour utiliser la date actuelle :

SELECT 
    NOW(),
    YEAR(NOW()); 

Résultat :

+---------------------+-------------+| MAINTENANT() | ANNEE(MAINTENANT()) |+---------------------+----------------------+| 2021-10-17 11:09:23 | 2021 |+---------------------+-------------+

Arguments invalides

Lorsqu'un argument invalide est passé, YEAR() renvoie null :

SELECT YEAR('2030-65-78'); 

Résultat :

+--------------------+| ANNEE('2030-65-78') |+--------------------+| NULL |+--------------------+1 ligne dans l'ensemble, 1 avertissement (0.00 sec)

Vérifiez l'avertissement :

SHOW WARNINGS; 

Résultat :

+---------+------+---------------------------------- -----------+| Niveau | Codage | Message |+---------+------+------------------------------ ----------+| Avertissement | 1292 | Valeur datetime incorrecte :'2030-65-78' |+---------+------+-------------------- --------------------+

Argument manquant

Appel de YEAR() avec le mauvais nombre d'arguments, ou sans passer d'arguments, génère une erreur :

SELECT YEAR(); 

Résultat :

ERROR 1064 (42000) :vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de ')' à la ligne 1

Et un autre exemple :

SELECT YEAR('2030-12-10', '2031-12-10'); 

Résultat :

ERROR 1064 (42000) :vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de ', '2031-12-10')' à la ligne 1