2009-09-05 30 views
8

Tengo un problema con la función datediff MYSQL, puedo usarlo y es simple. Pero no entiendo cómo usarlo para recopilar diferencias dentro del campo de la tabla. P.ej.Diferencia de fecha en MySQL para calcular la edad

tengo una columna dob y yo quiero escribir una consulta que va a hacer algo como

select dateDiff(current_timeStamp,dob) 
from sometable 'here dob is the table column 

quiero decir que quiero la diferencia de la fecha y hora actual en el campo de tabla dob, cada resultado de la consulta es el diferencia, la edad del usuario.

+0

no "la diferencia de la fecha y hora actual y una fecha de nacimiento" siempre ser la edad de esa persona? –

Respuesta

19

¿Te refieres a esto?

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

(Source)

+0

Devuelve nulo mi fecha almacenada es m/d/year, para registro que estoy trabajando tiene 1/1/1969 dob. pero devuelve null :(todo el tiempo – chsab420

+0

Utilizar TIMESTAMPDIFF es una opción mucho mejor – Eric

1

Si lo desea, para cada usuario, muestre la edad en años, lo hacen

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

Devuelve nulo mi fecha almacenada es m/d/year, para registro que estoy trabajando tiene 1/1/1969 dob. pero devuelve nulo: (todo el tiempo – chsab420

+0

Entonces, ¿cuál es el tipo de datos en su campo dob? Realmente debería utilizar un tipo de fecha/hora, no un texto sin formato. –

1

Si entiendo sus comentarios sobre las respuestas anteriores, la fecha de -la columna de nacimiento no es realmente un valor de DATE sino una cadena en el formato m/d/y. I fuertemente le recomiendo que cambie esto; ralentiza cualquier cálculo de fecha que desee hacer y corre el riesgo de ingresar valores de fecha no válidos en la columna.

Creo que esto es lo que necesita. Utiliza la función STR_TO_DATE() y un algoritmo para calcular la edad de la documentación de 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

creo que esto debería ayudar a

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0;

Nota: Dar la D.O.B en el formato correcto, por ejemplo YYYY-MM-DD'=> '1991-11-11

8

Usted puede hacer esto

SELECT TIMESTAMPDIFF(YEAR, date_of_birth, NOW()) AS edad FROM your_table

Obras cada vez.

0

probar este

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