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 ;)

17 Responses to “MYSQL - Calculando a idade no SQL”

  1. danilo Says:

    me ajudou
    =)

  2. samuel Says:

    valeu, deu certo.

  3. Dauber Says:

    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?

  4. Andrey Pedro Lefkum Says:

    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

  5. Dauber Says:

    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.

  6. Andrey Pedro Lefkum Says:

    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 ..

  7. Marcelo Gomes Says:

    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 ?

  8. Andrey Pedro Lefkum Says:

    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];
    }

  9. Henrique Says:

    Valeu…
    Estou iniciando agora como estagiário, e é sempre importante a ajuda de experts…

    Um Abraço.
    Flw

    Dom Pedro - Age of Empires - Chineses…

  10. Leandro Azevedo Says:

    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…

  11. Dauber Says:

    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.

  12. Andrey Pedro Lefkum Says:

    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!

  13. Dauber Says:

    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.

  14. Eden Says:

    Rapaz, essa dica me ajudou bastante. Há tempos estava tentando realizar este cálculo da idade para exibi-lo num jtextfield. Vlw!

  15. LEONARDO Says:

    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 .

  16. Marcos Says:

    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

  17. Marcos Says:

    continuação…

    if ($dias

Leave a Reply


This is a free Wordpress template provided by Mathew Browne | Web Design | SEO