Jump to content

POWERED BY:

Archived

This topic is now archived and is closed to further replies.

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?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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'

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.