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.
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.
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birthday, '00-%m-%d')) 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.
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 :
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 :
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 :
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!