2009-09-05 1 views
8

Ho un problema riguardante la funzione MYSQL datediff, posso usarlo ed è semplice. Ma non capisco come usarlo per raccogliere le differenze all'interno del campo della tabella. Per esempio.Data Differenza in MySQL per calcolare l'età

Ho una colonna dob e voglio scrivere una query che farà 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 campo di tabella dob, ogni risultato della query è il differenza, l'età dell'utente.

+0

Non sarebbe "la differenza dal datetime corrente e un DOB" essere sempre l'età di quella persona? –

risposta

19

Intendi questo?

SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), dob)), "%Y")+0 AS age from sometable 

(Source)

+0

Restituisce Null la mia data memorizzata è m/g/anno, per record che sto lavorando ha 1/1/1969 dob. ma restituisce null :(tutto il tempo – chsab420

+0

L'utilizzo di TIMESTAMPDIFF è un'opzione molto migliore – Eric

1

Se si desidera, per ogni utente, visualizzare l'età in anni, fanno

select name,extract(year from (from_days(dateDiff(current_timestamp,dob)))) 
     from sometable; 
+0

Restituisce Null la mia data memorizzata è m/g/anno, per record che sto lavorando ha 1/1/1969 dob, ma restituisce null: (tutto il tempo – chsab420

+0

Quindi qual è il tipo di dati sul tuo campo dob? Dovresti davvero usare un tipo di data/ora, non un testo semplice. –

1

Se ho capito i vostri commenti sulle risposte precedenti, la data-di -la colonna di nascita non è in realtà un valore DATE ma una stringa nel formato m/d/y. I fortemente consiglia di modificare questo; rallenta qualsiasi calcolo di data che si desidera eseguire e si rischiano valori di data non validi immessi nella colonna.

Penso 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; 
0

Penso 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

8

Si potrebbe fare questo

SELECT TIMESTAMPDIFF(YEAR, date_of_birth, NOW()) AS età FROM your_table

Opere ogni volta.

0

Prova questa

SELECT DATEDIFF(CURDATE(), '2014-02-14'); 
0
select truncate(datediff(curdate(),dob)/365.25,0) from table;