Ir para conteúdo

POWERED BY:

Arquivado

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

Célio A.

[Resolvido] Busca por idade utilizando campo 'date' do my

Recommended Posts

Precise de uma query que selecione em uma tabela os atletas com uma determinada idade, sendo que no campo dn eu armazeno a data de nascimento (date).

 

Segundo alguns tutoriais é possível criar uma expressão para subtrair o ano da data de nascimento com o ano da data atual assim eu terei uma idade levando em consideração apenas o ano e desconsiderando o mês e o dia de nascimento.

 

Descobri então que hipoteticamente é possível comparar se o mês/dia atual é maior ou menor que o mês/dia de nascimento subtraindo então ‘0’ ou ‘1’ ao resultado da subtração do ano.

 

a logica seria esta:

 

Calculando as datas atual e nascimento (2011/12/04 - 1985/04/05)

 

Então tenho

2011 – 1985 – (1204 > 0504) //retorna true 1 ou false 0

26 – 0

26

 

E tudo isto no mysql... maaaas... não deu certo não! :natalmad:

 

Gostaria de saber se é possível fazer desta forma.

 

O script que criei usando estas informações foi este:

 

$result = mysql_query( "SELECT nome, dn,
(YEAR(CURDATE()) - RIGHT(nascimento, 4)) - < LEFT(nascimento, 5)) AS idade
FROM atletas 
WHERE (YEAR(CURDATE()) - YEAR(dn, 4)) = 26" );

 

Aqui a tentativa foi selecionar os atletas com 26 anos de idade. Lembrando que esta tentativa foi só para tentar descobrir se é possível proceder desta forma. Na aplicação real o valor da data atual será uma string capturada de um formulário com a data do evento e a idade (26) uma string capturada de um select

Compartilhar este post


Link para o post
Compartilhar em outros sites

Digamos que eu tenha um campeonato dia 30/12/2011. Esta data esta registrado na tabela campeonatos.

 

Na tabela atletas eu tenho vários dado para que seja possível montar uma categoria de competição:

 

Ex

Masculino, faixa marrom e preta, 20 anos.

 

Então neste caso preciso buscar os atletas que estarão com 20 anos em 30/12/2011, não usarei a data atual e também não tem como indicar uma data de nascimento se não o campo da tabela onde as datas de nascimento dos atletas se encontram.

 

A questão seria mais para calcular o ano de nascimento do que a idade pois vou fornecer uma idade para buscar um ano de nascimento a questão seria (tenho 26 anos, em que ano eu nasci?) ao invés de (nasci em 1985 quantos anos eu tenho?).

 

Bem, me disseram que era possível fazer esta busca desta forma, mas não consegui, agora não sei se é erro de sintaxe ou o que.

 

Eu até poderia registrar a idade em vez da data de nascimento, mas desta forma não teria como aproveitar estes dados futuramente, por isso optei por utilizar a data de nascimento na esperança de conseguir criar esta função.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brother, o CURDATE() utilizado pelo Carlos serve para nos retornar a data atual, mas isso não significa que você tenha que usar ela.

No exemplo abaixo, a primeira data seria a data do campeonato em questão. A segunda, seria a data de nascimento do competidor.

 

A única correção que fiz além disso, foi mudar a divisão de anos de 365 para 365,25. O motivo disso é que, dessa forma, levamos em conta os anos bissextos.

 

SELECT
TRUNCATE(
	DATEDIFF(
		'2015-10-05',
		'1985-04-05'
	) / 365.25, 0
) as `idade`

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, isto eu entendi, mas não compreendo como vou utilizar para selecionar os atletas já que tenho que fornecer a data de nascimento, ou eu posso simplesmente indicar o campo onde as datas de nascimento estão guardadas?

 

E mesmo que fazendo desta forma eu consiga calcular a idade dos atletas como eu farei para retornar só os atletas com uma idade especifica?

 

Da pra fazer uma estrutura de controle dentro da própria query?

 

Ésta ta dificil!!! :natalsad:

 

Consegui desta forma:

 

$result = mysql_query("SELECT * ,(YEAR(CURDATE()) - YEAR(dn)) - (RIGHT(CURDATE(),5) < RIGHT(dn,5)) AS idade FROM id_5 HAVING idade < 27");
echo $result;

 

(YEAR(CURDATE()) - YEAR(dn))

//ano atual – ano de nascimento

 

- (RIGHT(CURDATE(),5) < RIGHT(dn,5))

//– (0 ou 1, true ou false), assim eu tenho uma idade exata, se eu não tiver feito aniversario tira 1 da minha idade senão tira 0.

 

Agora só falta testar usando strings.

Compartilhar este post


Link para o post
Compartilhar em outros sites
ou eu posso simplesmente indicar o campo onde as datas de nascimento estão guardadas?

Exato amigo.. relacionamento de tabelas.

 

E mesmo que fazendo desta forma eu consiga calcular a idade dos atletas como eu farei para retornar só os atletas com uma idade especifica?

Filtrando com WHERE.

 

Poste a estrutura das tabelas que são usadas nisso para montarmos uma consulta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja consegui, usei este codigo

 

SELECT * ,(YEAR(CURDATE()) - YEAR(dn)) - (RIGHT(CURDATE(),5) < RIGHT(dn,5)) AS idade 
FROM atleta HAVING idade = 27");

 

agora vou testar usando uma variavel no lugar de curdate e da idade 27.

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.