Maison  >  Article  >  base de données  >  Résumer les cinq méthodes de calcul de l'âge dans MySQL et leurs avantages et inconvénients respectifs

Résumer les cinq méthodes de calcul de l'âge dans MySQL et leurs avantages et inconvénients respectifs

零下一度
零下一度original
2017-05-05 16:39:411731parcourir

Je n'utilisais pas beaucoup MySQL auparavant et je n'étais pas très familier avec les fonctions MySQL. Lorsque j'ai rencontré ce problème, j'ai immédiatement recherché Baidu et trouvé ces deux méthodes. Ces deux méthodes sont classées en premier dans les blogs de Baidu.

Méthode 1

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age

Méthode 1, l'auteur a également souligné le défaut, c'est-à-dire que lorsque la date est une date future, le résultat est 0, pas un nombre négatif 5 ; fonctions et deux sont utilisés ici opérateur.

Méthode 2

SELECT DATE_FORMAT(NOW(), &#39;%Y&#39;) - DATE_FORMAT(birthday, &#39;%Y&#39;) - (DATE_FORMAT(NOW(), &#39;00-%m-%d&#39;) < DATE_FORMAT(birthday, &#39;00-%m-%d&#39;)) AS age

La méthode 2 résout le problème des nombres négatifs dans la méthode 1, mais elle semble plus compliquée ; 6 fonctions et 3 opérateurs sont utilisés ici.

Après avoir lu cet article, j'ai été abasourdi. Comment cela pouvait-il être si compliqué auparavant ? Je crois fermement qu'il doit y avoir un moyen simple et efficace. Une méthode améliorée basée sur la méthode ci-dessus a été rapidement trouvée.

Méthode 1 et méthode 2 améliorées

SELECT year( from_days( datediff( now( ), birthdate)));
SELECT YEAR(CURDATE())-YEAR(birthday)-(RIGHT(CURDATE(),5)<RIGHT(birthday,5));

Méthode 1 améliorée, une fonction en moins et un opérateur manquant Lorsque la date est une date future, le résultat du calcul est toujours 0 ;
La deuxième méthode améliorée a toujours 6 fonctions et 3 opérateurs, ce qui semble plus simple ; prenez les cinq bons chiffres de la date, et lorsque le format de la date est '2013-01-01', le résultat est '01-01''. , il n'y a pas de problème ; lorsque le format de date est le format abrégé « 2013-1-1 », les cinq chiffres à droite sont supprimés comme « 3-1-1 », ce qui provoquera une erreur.

Puis j'ai pensé à la troisième méthode basée sur la fonction date dans le document d'aide MYSQL :

Méthode 3

SELECT FLOOR(DATEDIFF(CURDATE(), @birthday)/365.2422)

Divisez l'anniversaire et le nombre de jours avant la date actuelle Prenez le nombre réel de jours dans une année (365 jours, 5 heures, 48 ​​​​minutes et 46 secondes), puis arrondissez au nombre entier le plus proche. Cela n'utilise que trois fonctions et un opérateur.

Ensuite, j'ai rapidement trouvé la quatrième méthode sur des sites étrangers :

Méthode 4

 SELECT  TIMESTAMPDIFF(YEAR, @birthday, CURDATE())

Cette méthode n'utilise que deux fonctions.

J'ai testé les quatre méthodes ci-dessus. Si la date actuelle est le '2017-1-13' et l'anniversaire est le '2013-1-14', l'anniversaire est dans un jour, soit 4 ans. Il ne reste qu'un jour et le résultat date de 3 ans, ce qui ne semble pas très raisonnable. Modifiez la méthode trois et ronde pour obtenir la méthode cinq :

Méthode cinq

SELECT ROUND(DATEDIFF(CURDATE(), @birthday)/365.2422)

. L'âge ainsi calculé est loin de l'âge réel qui s'en rapproche le plus, mais la méthode 4 est peut-être la plus cohérente avec la définition de l'âge.

[Recommandations associées]

1. Tutoriel vidéo en ligne MySQL gratuit

2. Dernier tutoriel manuel MySQL

.

3. Tutoriel vidéo d'introduction à l'éducation booléenne Yan Shiba mysql

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn