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.

È stato utile?

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()) ASageFROM 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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top