MYSQL - Calculando a idade no SQL
Após o super artigo mostrando como calcular a idade de um indivíduo com JavaScript, estou aqui com um outro super, hiper artigo (Modesto) para mostrar como calcular a idade com SQL.
Vamos lá:
É simples de montar, bastar passar como parâmetro o campo DATA:
SELECT usuarioNome
,(YEAR(CURDATE()) - YEAR(usuarioNascimentoData)) - (RIGHT(CURDATE(),5) < RIGHT(usuarioNascimentoData,5)) AS usuarioIdade
FROM usuario
WHERE usuarioNome LIKE ‘%andrey%’
Fácil e objetivo!
Se tiverem alguma dúvida, basta postar aqui!
E lembrando, usou o código, é obrigatório deixar seu regado ![]()
March 23rd, 2007 at 1:34 pm
me ajudou
=)
June 24th, 2007 at 7:22 am
valeu, deu certo.
August 24th, 2007 at 12:27 pm
Amigo.
Esta tua fórmula é legal. Funciona.
Mas como poderíamos calcular esta mesma idade em anos, meses e dias, diretamente no MySQL através de um select?
August 25th, 2007 at 5:30 am
Olá Dauber, de cabeça não me recordo, mas se precisar achei uma função em php que faz isso…
se quiser me avisa!
Att.,
Andrey
August 27th, 2007 at 5:28 am
Olá Andrey.
Em PHP temos várias tipos de funções para esse cálculo de idade, e que funcionam bem.
Mas, a minha necessidade é, diretamente do MySql, através de um select.
Veja:
1. Se usarmos DataDiff, o resultado será em dias, que deverá ser convertido em anos por 365, o que não dará uma idade exata, em função de várias diferenças, por exemplo, anos bissextos e meses de 30, 31 e 28 dias, mesmo se usarmos meses de 30,4166 dias.
2. Se usarmos Period_diff, o resultado será em meses, mas também com grandes diferenças, pelas mesmas razões do Data_diff.
3. Em Excel, existe uma função, DATADIF, que pasme meu amigo, também dá diferenças, por exemplo entre 27/08/2007 e 28/11/2004 dá uma idade assim ó: 2 anos 8 meses e 32 dias, quando deveria ser 2 anos 8 meses e 30 dias pois falta um dia para 2 anos e 9 meses.
Bem, Andrey, a aplicação que tenho roda um relatório direto do MySql sem interferência ou junção com código em PHP, por isso essa minha necessidade.
Será que existe mesmo uma função que calcule a idade em anos, meses e dias direto de um select?
Um abraço e muito grato por esta ajuda.
August 27th, 2007 at 6:28 am
Dauber, sinceramente acho que há mas não sei fazer, porém sem quem possa =D
Enviei um e-mail para um amigo que manja de mysql e estou aguardando retorno…
—-
Escrito por E-mail por Alexandro Cordeiro
blz..
Andrey…
posso ver com mais calma..
mas, a principio se os dois campos sao do tipo data ou timestamp eu consigo o numero de anos fazendo uma subtracao entre as datas..o resultado dará um numero real..
onde a parte inteira seria os anos e a parte decimal os dias ..
September 9th, 2007 at 2:06 pm
Ajudou bastante!!! Estou procurando mais informações para manipulação dos dados em Mysql.
Por exemplo tenho um campo em que esta assim “Marcelo Gomes idade 32″ e gostaria de separar em dois campos diferentes.
Pode me ajudar ?
September 10th, 2007 at 4:33 am
Olá Marcelo!
Não conheço essa sintax mas assim
é como se você desse um explode no php ou split no js em ” idade “, dessa forma teria dois vetores, um com o nome e outro com a idade…
Depois usa alias para deixar os valores em dois campos…
Cara se for fazer em PHP… ficaria:
…
while($linha = mysql_fetch_array($resultado)) {
$vetor = explode(” idade “, $linha['campo']);
$nome = $vetor[0];
$idade = $vetor[1];
}
…
January 2nd, 2008 at 11:15 am
Valeu…
Estou iniciando agora como estagiário, e é sempre importante a ajuda de experts…
Um Abraço.
Flw
Dom Pedro - Age of Empires - Chineses…
January 17th, 2008 at 6:37 am
olá, quero agradecer pela grande ajuda q vc me fez com essa matéria, estava a procura pelo Google, e achei seu site, resolvel meu problema, queria fazer uma lista a´partir do meu banco de dados somente com usuários q tivessem mais q 18 anos, com a ajuda do que encontrei aqui consegui resolver…
muito obrigado…
$result = mysql_query (”SELECT nome, sobrenome FROM membros WHERE (YEAR(CURDATE()) - YEAR(data_nascimento)) - (RIGHT(CURDATE(),5) = 18″);
fica com DEUS…
February 21st, 2008 at 12:02 pm
Grande Andrey.
Este é mais um desafio com que estou me deparando.
Veja se consegues me dar uma ajuda para isso.
Abaixo duas tabelas que quero juntar para criar uma terceira, ou seja C = A + B.
Mas veja, apenas com código SQL no MySQL, sem código PHP ou outra linguagem qualquer.
Tabela A:
+————+————–+
| Municipio | Nome |
| | |
| 1 | São Gabriel |
| 2 | Uruguaiana |
| 3 | São Marcos |
| 4 | Porto Alegre |
| 5 | Farroupilha |
+————+————–+
Tabela B:
+———–+—————–+
| Municipio | Comunidade |
| | |
| 1 | Vila Assunção |
| 2 | Vila do Céu |
| 2 | Vila Maria |
| 2 | Vila Sta Clara |
| 3 | Vila do Carmo |
| 5 | Vila Olímpia |
| 5 | Vila Pompéia |
+———–+—————–+
Tabela C:
+———–+—————–+
| Municipio | Comunidades |
| | |
| 1 | Vila Assunção |
| 2 | Vila do Céu, |
| | Vila Maria, |
| | Vila Sta Clara |
| 3 | Vila do Carmo |
| 4 | |
| 5 | Vila Olímpia, |
| | Vila Pompéia |
+———–+—————–+
Como gerar a tabela C com a junção das tabelas A e B?
Um registro da tabela A e um ou mais registros da tabela B gravados em um registro da tabela C, ou seja, juntando as Comunidades por Município?
Será que conseguimos fazer isso?
Grande abraço.
February 21st, 2008 at 12:13 pm
Opa Blza Cara!
Já conseguiu utilizar o UNION?
(
SELECT municipio as campo1
,municipio as campo2
FROM tabelaQualquer
)
UNION ALL (
SELECT municipio as campo1
,comunidade as campo2
FROM tabelaQualquer2
)
tenta ae… ve se te ajuda!
Abraço!
February 21st, 2008 at 12:46 pm
Blza amigão.
Veja, o UNION não vai fazer isso que eu quero.
Confere comigo o município número 2, por exemplo,
na tabela B onde temos tres registros: Vila do Céu, Vila Maria e Vila Sta Clara.
Quero criar um registro para o município 2 com um campo texto que contenha os nomes das tres comunidades.
Entendeu?
Abraço.
February 27th, 2008 at 8:18 am
Rapaz, essa dica me ajudou bastante. Há tempos estava tentando realizar este cálculo da idade para exibi-lo num jtextfield. Vlw!
July 25th, 2008 at 3:14 pm
Primeiramente Boa tarde a todos… colegas eu cruzo 2 tabelas no meu banco de dados e tenho o re e nome dos funcionários… ,
eu tenho o nome completo como está cadastrado no banco e exibo na minha página php. A minha dúvida é a seguinte… como eu capturo somente o primeiro nome… tentei utilizar um vetor mas nada… Algue sabe alguma função para rodar no banco ou algun script… Muito obrigado .
October 8th, 2008 at 10:44 am
Para calculo de idade uso o seguinte em php é facil e direto:
<?
function fnIdade($data_nasc)
{
$qdm = “312831303130313130313031″; // Qtde dia no mes
$dth_dia = date(”d”);
$dth_mes = date(”m”);
$dth_ano = date(”Y”);
$aVet = Explode( “/”,$data_nasc );
$dtn_ano = $aVet[2];
$dtn_mes = $aVet[1];
$dtn_dia = $aVet[0];
$anos = $dth_ano - $dtn_ano;
$meses = $dth_mes - $dtn_mes;
if ($meses <= 0) {
$anos = $anos - 1;
$meses = $meses + 12;
}
$dias = $dth_dia - $dtn_dia;
if ($dias
October 8th, 2008 at 10:45 am
continuação…
if ($dias