Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

felipe maricato moura

calculo de idade no mysql

Recommended Posts

procurei nas funções de date e não achei preciso calcular quantos anos tem cada pessoa no banco e quero fazer isso através da queryentão eu consigo saber quantos dias esse pessoa tem mas não consgio transofram esses dias em anos tipo assimSELECT * DATEDIFF(CURRENT_DATE,dataNacimento) FROM cliente;como transoformar esses dias em anos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

leia essa paginahttp://dev.mysql.com/doc/mysql/en/date-and...-functions.htmldei uma lida por cimamas parece que você pode resolver isso convertendo o valor que obtem para timestamp() e depois fazer o c@alculo de diferenca de anos, meses ...um exemplo:

EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03") gives 199907 - the required format for PERIOD_DIFFso age isPERIOD_DIFF(EXTRACT(YEAR_MONTH FROM now()),EXTRACT(YEAR_MONTH FROM the_birth_date))/12

referencia: http://sunsite.mff.cuni.cz/MIRRORS/ftp.mys..._functions.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

OLHA SINCERAMENTE EU NAÕ TESTE O QUE TU COLOCOU AI MAS EU CONSEGUI UMA OUTRA BEM INTERESSANTE NA REAL É A MESMA COISA QUE TU FEZ USANDO OUTRAS FUNÇÕES HEHE SACA SÓSELECT(YEAR(CURDATE())-YEAR(aniversario))-(RIGHT(CURDATE(),5)<RIGHT(aniversario,5)) as 'idade',`nome` as 'Nome',`email` as 'E-mail',`telefones` as 'telefones'

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz um teste com a sua query e retornou errado

retornou 1 ano a menos

 

(YEAR(CURDATE())-YEAR(data_nasc))-(RIGHT(CURDATE(),5)<RIGHT(data_nasc,5)) as idade

 

esse outro que eu tinha mostrado funciona porém não calcula o dia do mês..

 

PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM now()),EXTRACT(YEAR_MONTH FROM data_nasc))/12 AS idade

montei essa outra:

 

PERIOD_DIFF(DATE_FORMAT(now(),"%Y%m%d"),DATE_FORMAT(data_nasc,"%Y%m%d"))/1200 AS idade

dividi o resultado por 1200 o resultado poderá retornar com 2 casas decimais

o que vale é o valor inteiro.

 

por exemplo, se retornar 23,99 então tem 23 anos mas está próximo do aniversário para ompletar 24.

 

bom... faça os testes.

 

 

 

insatisfeito pesquisei um pouco mais e encontrei esse:

 

CAST( (TO_DAYS(NOW())- TO_DAYS(data_nasc)) / 365.25 as SIGNED) AS idade

esse retorna o valor certo sem problemas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá galera, achei bem interessante este tópico, é mais ou menos o que estou precisando fazer mas não compreendi muito bem, não sei se se encaixaria no meu caso, estive fazendo uns testes mas não consegui.O que eu preciso é que a partir de uma busca por idade = 18-24 ele calcule atraves do nascimento que esta no formato 1981/12/24 e retorne os registros que tenham a idade de 18 a 24.. acredito que estes exemplos se encaixariam mas nao estou encontrando o jeito certo.Alguém pode me ajudar?Xavier

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, gostaria de saber se é possível inserir a idade no ato do cadastro, por exemplo quando cadastro o nascimento e o falecimento desta forma:

 

CODE
$data_nasc = "$_POST[ano]-$_POST[mes]-$_POST[dia]";

$data_falec = "$_POST[ano2]-$_POST[mes2]-$_POST[dia2]";

 

no ato do cadastramento poderia gerar a idade, ou pegar depois, mas não sei como fazer isso,

ambas são inseridas em um campo tipo date no banco.

 

agradeço qualquer auxílio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve mrs...

 

nao da pra armazenar idade pois ela é um campo calculado.. na teoria, naum se armazena campos calculados... até da, mas voce tera q todos os dias rodar uma rotina para ver se a idade mudou e atualizar.... besteira neh.

 

mas ae vai uma solucao. Usei isso faz muito anos e guardei.. se naum me engano, eh a prova de erro.. mas faca um teste e manda pro povo o resultado

create table x (nascimento date);
insert into x values('2081-10-11');
SELECT nascimento, CURDATE(), (YEAR(CURDATE())-YEAR(nascimento)) - (RIGHT(CURDATE(),5) < RIGHT(nascimento,5)) AS idade
FROM x;

vejo 2 formas de voce fazer essa sua consulta...

1a - para tabelas pequenas, menos de 50mil registros acho q rola sussegado

SELECT * FROM tabela where (YEAR(CURDATE())-YEAR(nascimento)) - (RIGHT(CURDATE(),5) < RIGHT(nascimento,5)) between 18 and 24;

2a - para tabelas maiores

fazer uma procedure que vai pegar a idade inicial e final, transformar isso em data e fazer a busca direto por data... algo como

idade_inicial = 18
idade_final = 24
data_inicial = XXXXX -- calcular a data menor que uma pessoa de 18 anos possa ter
data_final = XXXXX -- calcular a data maior que uma pessoa de 24 anos possa ter

SELECT * FROM tabela WHERE nascimento BETWEEN data_inicial and data_final;

abs,

ska!

Compartilhar este post


Link para o post
Compartilhar em outros sites

select (YEAR(now()) - YEAR(niver) - if( DATE_FORMAT(now(), '%m%d') > DATE_FORMAT(niver, '%m%d') ,0 , -1)) from tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.