Data Differenza di MySQL per calcolare l'età
Domanda
Ho un problema per quanto riguarda la funzione datediff
MYSQL, posso usarlo ed è semplice. Ma non capisco come usarlo per raccogliere le differenze all'interno del campo della tabella. Per es.
Ho un dob
colonna e voglio scrivere una query che fare qualcosa di simile
select dateDiff(current_timeStamp,dob)
from sometable 'here dob is the table column
Voglio dire che voglio la differenza a partire dal momento della data corrente al dob
campo di tabella, ogni risultato della query è la differenza, l'età dell'utente.
Soluzione
Vuoi dire come questo?
SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), dob)), "%Y")+0 AS age from sometable
( Fonte )
Altri suggerimenti
Si potrebbe fare questo
SELECT TIMESTAMPDIFF(YEAR, date_of_birth, NOW()) AS
ageFROM your_table
Opere ogni volta.
Se si desidera, per ogni utente, visualizzare l'età in anni, fare
select name,extract(year from (from_days(dateDiff(current_timestamp,dob))))
from sometable;
Se ho capito i vostri commenti sulle risposte precedenti, la colonna della data-di-nascita non è in realtà un valore DATE
ma una stringa nel formato g / m / y. I con forza consiglia di cambiare questo; rallenta qualsiasi calcolo data che si desidera fare e si rischia di valori di data non validi sempre inserito nella colonna.
Credo che questo sia quello che ti serve. Esso utilizza la funzione STR_TO_DATE()
e un algoritmo per calcolare l'età dalla documentazione di 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;
Credo che questo dovrebbe aiutare
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0;
Nota: Dare il D.O.B nel formato corretto, ad esempio YYYY-MM-DD'=> '1991-11-11
Prova questo
SELECT DATEDIFF(CURDATE(), '2014-02-14');
select truncate(datediff(curdate(),dob)/365.25,0) from table;