Différence Date de MySQL pour calculer l'âge
Question
J'ai un problème en ce qui concerne la fonction MYSQL datediff
, je peux l'utiliser et il est simple. Mais je ne comprends pas comment l'utiliser pour recueillir des différences dans le champ de la table. Par exemple.
J'ai un dob
de colonne et je veux écrire une requête qui va faire quelque chose comme
select dateDiff(current_timeStamp,dob)
from sometable 'here dob is the table column
Je veux dire que je veux la différence à partir du moment de la date actuelle du champ de table dob
, chaque résultat de la requête est la différence, l'âge de l'utilisateur.
La solution
Vous voulez dire comme ça?
SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), dob)), "%Y")+0 AS age from sometable
( Source )
Autres conseils
Vous pouvez le faire
SELECT TIMESTAMPDIFF(YEAR, date_of_birth, NOW()) AS
ageFROM your_table
Travaux à chaque fois.
Si vous voulez, pour chaque utilisateur, afficher l'âge en années, faire
select name,extract(year from (from_days(dateDiff(current_timestamp,dob))))
from sometable;
Si je comprends vos commentaires sur les réponses précédentes, la date de naissance colonne n'est pas réellement une valeur DATE
mais une chaîne au format m / d / y. I fortement vous recommandons de changer cela; il ralentit les calculs de date que vous voulez faire et vous risquez des valeurs de date invalides s'entrée dans la colonne.
Je pense que c'est ce que vous avez besoin. Il utilise la fonction STR_TO_DATE()
et un algorithme de calcul de l'âge de la documentation MySQL:
SELECT YEAR(CURDATE()) - YEAR(STR_TO_DATE(dob, '%m/%d/%Y'))
- (RIGHT(CURDATE(), 5) < RIGHT(STR_TO_DATE(dob, '%m/%d/%Y'), 5)) AS age
FROM sometable;
Je pense que cela devrait aider
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0;
Note: Donnez le D.O.B dans le bon format, par exemple YYYY-MM-DD'=> '1991-11-11
Essayer cette
SELECT DATEDIFF(CURDATE(), '2014-02-14');
select truncate(datediff(curdate(),dob)/365.25,0) from table;