Diferença de data no MySQL para calcular a idade
Pergunta
Estou com um problema em relação ao datediff
Função MYSQL, posso usá-la e é simples.Mas não entendo como usá-lo para coletar diferenças dentro do campo da tabela.Por exemplo.
Eu tenho uma coluna dob
e quero escrever uma consulta que fará algo como
select dateDiff(current_timeStamp,dob)
from sometable 'here dob is the table column
Quer dizer, quero a diferença da data e hora atual para o campo da tabela dob
, cada resultado da consulta é a diferença, a idade do usuário.
Solução
Você quer dizer assim?
SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), dob)), "%Y")+0 AS age from sometable
(Fonte)
Outras dicas
Você poderia fazer isso
SELECT TIMESTAMPDIFF(YEAR, date_of_birth, NOW()) AS
eraFROM your_table
Funciona sempre.
Se você quiser, para cada usuário, exiba a idade em anos, faça
select name,extract(year from (from_days(dateDiff(current_timestamp,dob))))
from sometable;
Se eu entendi seus comentários sobre as respostas anteriores, a coluna Data do nascimento não é realmente um DATE
valor, mas uma string no formato m/d/y. EU fortemente Recomende que você mude isso; Ele diminui os cálculos de data que você deseja fazer e corre o risco de valores de data inválida sendo inseridos na coluna.
Eu acho que é isso que você precisa. Ele usa o STR_TO_DATE()
função e um algoritmo para calcular a idade da documentação do 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;
Eu acho que isso deve ajudar
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0;
Observação:Forneça o D.O.B no formato correto, por exemplo. YYYY-MM-DD'=> '1991-11-11
Tente isso
SELECT DATEDIFF(CURDATE(), '2014-02-14');
select truncate(datediff(curdate(),dob)/365.25,0) from table;