none
Retorno de Idade RRS feed

  • Pergunta

  • Gostaria de saber se tem como eu fazer um stored que tem um campo com a data de nascimento e fazer o calculo da idade e me retornar isso com um novo campo da tabela ?

     

    Grato

     

    Silmar

    sábado, 9 de junho de 2007 18:53

Todas as Respostas

  • Oi, Silmar.

     

         Se eu entendi sua pergunta, com um SELECT como o que está abaixo você consegue calcular a idade e retorná-la como um novo campo. Se não foi exatamente isso que você perguntou, avise-me.

     

    Code Snippet

         SELECT DATA_NASCIMENTO, DATEDIFF(Year, DATA_NASCIMENTO, GETDATE()) AS IDADE FROM SUA_TABELA

     

         Espero que isso o ajude.

     

    Abraço.

    sábado, 9 de junho de 2007 19:09
  •  Eduardo Marques da Costa wrote:

    Oi, Silmar.

    Se eu entendi sua pergunta, com um SELECT como o que está abaixo você consegue calcular a idade e retorná-la como um novo campo. Se não foi exatamente isso que você perguntou, avise-me.

    Code Snippet

    SELECT DATA_NASCIMENTO, DATEDIFF(Year, DATA_NASCIMENTO, GETDATE()) AS IDADE FROM SUA_TABELA

    Espero que isso o ajude.

    Abraço.



    Eduardo,
     
    desta forma pode trazer algumas idades erradas se o dia/mês do nascimento for maior que o dia/mês de GetDate().
    Por exemplo, levando hoje (09/06/2007) como argumento e a data de nascimento de 20/10/1959, este select exibiria 48 anos, quando na verdade só seria 48 após dia 20/10/2007.
    Veja o resultado:

    Code Snippet

    declare @data datetime
    set @data = cast('19591020' as datetime)
    select @data 'Nascimento', datediff(year, @data, getdate()) as 'Idade'

    Nascimento Idade
    ----------------------- -----------
    1959-10-20 00:00:00.000 48


    Para um resultado mais preciso pode-se usar uma alternativa, como no exemplo:

    Code Snippet

    declare @data datetime
    set @data = cast('19591020' as datetime)
    select @data 'Nascimento',year(getdate() - @data) - 1900 'Idade'

    Nascimento Idade
    ----------------------- -----------
    1959-10-20 00:00:00.000 47


    Note que se a pessoa nasceu neste século, no início século passado ou no anterior, a fórmula continua funcionando:

    Code Snippet

    declare @data datetime
    set @data = cast('18991020' as datetime)
    select @data 'Nascimento',year(getdate() - @data) - 1900 'Idade'

    Nascimento Idade
    ----------------------- -----------
    1899-10-20 00:00:00.000 107


    Code Snippet

    declare @data datetime
    set @data = cast('20011020' as datetime)
    select @data 'Nascimento',year(getdate() - @data) - 1900 'Idade'

    Nascimento Idade
    ----------------------- -----------
    2001-10-20 00:00:00.000 5


    Espero ter ajudado.

    Abraço.


    sábado, 9 de junho de 2007 23:29
  • Oi, Gesiel.

     

         Você tem razão. Eu acreditava que a função datediff consideraria também os meses e os dias para o cálculo dessa diferença de anos mas não é assim que funciona.

     

         Obrigado pelo esclarecimento. Smile

     

    Abraço.

    domingo, 10 de junho de 2007 04:35
  • Eduardo,

     

    Tente fazer assim:

     

    SELECT DATA_NASCIMENTO, DATEDIFF(Year, DATA_NASCIMENTO, GETDATE()) AS ANOS,

                                                              DATEDIFF(MONTH, DATA_NASCIMENTO, GETDATE()) AS MESES,

                                                              DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) AS DIAS FROM SUA_TABELA

     

    segunda-feira, 11 de junho de 2007 11:36