none
calcular idade RRS feed

  • Pergunta

  • Boa tarde a todos/as.

    Tenho uma tabela com a data de nascimento do usuario. ok.
    Preciso fazer uma tela com um dropdownlist com as opções "todas", "15 a 24", "25 a 34", "35 a 44", "45 a 54" e "> 54".
    Quando eu selecionar uma destas opções, deverá aparecer uma gridview com os usuarios pertencentes a estas faixas etárias.
    Eu criei o dropdownlist com as opções, mas preciso calcular as idades e testalas com estas faixas etárias para criar um gridview, como eu faço isso?

    Obrigado.
    segunda-feira, 28 de setembro de 2009 19:40

Respostas

  • Para a consulta, conforme o kauebranco citou, tente esse exemplo:
    Considerando o campo nascimento como do tipo DateTime ou SmallDateTime

    SELECT

     

    (YEAR(GETDATE()) - YEAR(nascimento)) FROM cadastro

    ou

    SELECT

     

    DATEDIFF(YEAR, nascimento, GETDATE()) FROM cadastro

    Estas duas consultas retornam os mesmos resultados, ou seja, o cálculo da idade.
    Agora para você testar cada resultado monte uma lógica de testes de cada um dos resultados.

    Boa sorte.


    Leonardo Silva
    • Marcado como Resposta joaoluizbt quinta-feira, 1 de outubro de 2009 12:21
    terça-feira, 29 de setembro de 2009 13:53
  • Bom dia JoaoLuiz

    A comparação da IDADE pode ser feita da seguinte maneira (@idade > 15 AND @idade < 25).

    Vale lembrar do que o Fernando falou logo acima, o .NET Framework permite fazer esses calculos de datas e passa-los como parametros para seu SELECT.

    “Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”.
    Atenciosamente,
    Harley Araujo
    • Sugerido como Resposta Harley Araujo quarta-feira, 30 de setembro de 2009 14:32
    • Marcado como Resposta joaoluizbt quinta-feira, 1 de outubro de 2009 12:21
    quarta-feira, 30 de setembro de 2009 14:32

Todas as Respostas

  • Isso é muito mais o SQL.

    Utilize a função DateDiff do SQL e faça a comparação entre o getdate() e a data de nascimento.
    segunda-feira, 28 de setembro de 2009 19:42
  • Ok, mas... como eu faço isso?

    eu crio isso num sqldatasource? com o query builder?

    faço num arquivo c# separado?

    faço no dorpdownlist ou no gridview?

    não conheço o DateDiff...

    Obrigado.
    segunda-feira, 28 de setembro de 2009 19:44
  • joao,

    Seria interessante primeiro se ambientar com o .NET Framework....... Nele existe uma classe somente para manipulaçao de Datas System.DateTime  ENTRE OS METODOS disponiveis existe o DateDiff que calcula a diferença entre 2 datas....

    Outra forma de fazer é via TSQL (Transacition SQL) já retornando a diferença em anos, rm TSQL tb existem funçoes para manipulação de data.
    Fernando Cerqueira MVP.ASP.NET TEAM AJAX.TOOLKIT CONSULTOR & ARQUITETO
    segunda-feira, 28 de setembro de 2009 21:24
    Moderador
  • ok, eu vi que o datediff pega uma data inicial e uma data final e calcula a diferença das duas.

    mas a questão é:

    Eu tentei criar um campo virtual para colocar esta diferença no sql mas não deu certo:
    SELECT idcadastro, pessoa, nome, cargo, sexo, comoconheceu, nascimento, 
           DateDiffYear(datetime.now, nascimento) AS idade 
    FROM cadastro 
    WHERE (pessoa = @pessoa OR @pessoa = 'Todos') AND 
               (sexo = @sexo OR @sexo = 'Todos') AND 
               (cargo = @cargo OR @cargo = 'Todos')
    Tentei criar no metodo load do gridview uma variavel com o comando datediff, mas não deu certo tambem...

    Eu estou meio perdido. onde eu consigo manipular esses dados?
    terça-feira, 29 de setembro de 2009 13:22
  • Para a consulta, conforme o kauebranco citou, tente esse exemplo:
    Considerando o campo nascimento como do tipo DateTime ou SmallDateTime

    SELECT

     

    (YEAR(GETDATE()) - YEAR(nascimento)) FROM cadastro

    ou

    SELECT

     

    DATEDIFF(YEAR, nascimento, GETDATE()) FROM cadastro

    Estas duas consultas retornam os mesmos resultados, ou seja, o cálculo da idade.
    Agora para você testar cada resultado monte uma lógica de testes de cada um dos resultados.

    Boa sorte.


    Leonardo Silva
    • Marcado como Resposta joaoluizbt quinta-feira, 1 de outubro de 2009 12:21
    terça-feira, 29 de setembro de 2009 13:53
  • Muito bom, agora eu consigo calcular a idade e exibir na grid. só falta filtrar por faixa etária.

    Eu fiz este comando para tentar filtrar. Está correto, eu posso usar between aqui?

    SELECT idcadastro, pessoa, nome, cargo, sexo, comoconheceu, nascimento, 
           YEAR(GETDATE()) - YEAR(nascimento) AS idade 
    FROM cadastro 
    WHERE (pessoa = @pessoa OR @pessoa = 'Todos') AND 
         (sexo = @sexo OR @sexo = 'Todos') AND 
         (cargo = @cargo OR @cargo = 'Todos') AND 
         (comoconheceu = @comoconheceu OR @comoconheceu = 'Todos') AND 
         (@idade BETWEEN 15 AND 24 OR @idade = -99)
    Obrigado.
    terça-feira, 29 de setembro de 2009 15:17
  • Bom dia JoaoLuiz

    A comparação da IDADE pode ser feita da seguinte maneira (@idade > 15 AND @idade < 25).

    Vale lembrar do que o Fernando falou logo acima, o .NET Framework permite fazer esses calculos de datas e passa-los como parametros para seu SELECT.

    “Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”.
    Atenciosamente,
    Harley Araujo
    • Sugerido como Resposta Harley Araujo quarta-feira, 30 de setembro de 2009 14:32
    • Marcado como Resposta joaoluizbt quinta-feira, 1 de outubro de 2009 12:21
    quarta-feira, 30 de setembro de 2009 14:32
  • Ola Joao,


    De uma olhada neste artigo, ele mostra como calcular datas c#:



    Atenciosamente

    Se a resposta for útil marque como tal

    Thiago Dorneles
    quarta-feira, 30 de setembro de 2009 14:44
  • Muito obrigado Herley, ajudou muito sua orientação.
    Eu não pude usar exatamente desta maneira porque o dropdownlist está preenchido com opções do tipo string, então eu configurei para que cada opção retornasse um valor (preferi atribuir o valor do índice da lista), então, a opção todos retorna 1, a opção 15 a 24 retorna 2, a opção 25 a 34 retorna 3 e assim por diante.
    No sql, eu usei o filtro @idade para comparar qual opção foi selecionada para que o calculo da faixa etária fosse feito com o campo criado YEAR(GETDATE()) - YEAR(nascimento).

    Então a sql ficou assim:

    SELECT     idcadastro, pessoa, nome, cargo, sexo, comoconheceu, nascimento, YEAR(GETDATE()) - YEAR(nascimento) AS idade
    FROM         cadastro
    WHERE     (pessoa = @pessoa OR
                          @pessoa = 'Todos') AND (sexo = @sexo OR
                          @sexo = 'Todos') AND (cargo = @cargo OR
                          @cargo = 'Todos') AND (comoconheceu = @comoconheceu OR
                          @comoconheceu = 'Todos') AND (@idade = 1) OR
                          (pessoa = @pessoa OR
                          @pessoa = 'Todos') AND (sexo = @sexo OR
                          @sexo = 'Todos') AND (cargo = @cargo OR
                          @cargo = 'Todos') AND (comoconheceu = @comoconheceu OR
                          @comoconheceu = 'Todos') AND (   ( (@idade = 2) AND (YEAR(GETDATE()) - YEAR(nascimento) >= 15) AND (YEAR(GETDATE()) - YEAR(nascimento) < 25) ) OR
                          ( (@idade = 3) AND (YEAR(GETDATE()) - YEAR(nascimento) >= 25) AND (YEAR(GETDATE()) - YEAR(nascimento) < 35) ) OR 
                          ( (@idade = 4) AND (YEAR(GETDATE()) - YEAR(nascimento) >= 35) AND (YEAR(GETDATE()) - YEAR(nascimento) < 45) ) OR
                          ( (@idade = 5) AND (YEAR(GETDATE()) - YEAR(nascimento) >= 45) AND (YEAR(GETDATE()) - YEAR(nascimento) < 55) ) OR
                          ( (@idade = 6) AND (YEAR(GETDATE()) - YEAR(nascimento) >= 55) )   )
    Muito obrigado a todos que me ajudaram.
    quinta-feira, 1 de outubro de 2009 12:21