Como calcular a idade de uma pessoa no SQL Server?
Sou iniciante no SQL e estou tendo uma série de dificuldades, entre preciso saber o seguinte:
Em uma consulta SQL, qual a melhor forma de se calcular a idade de uma pessoa em formato inteiro no SQL?
Obrigado!
Em uma consulta SQL, qual a melhor forma de se calcular a idade de uma pessoa em formato inteiro no SQL?
Obrigado!
Luth Ferreira
Curtidas 0
Melhor post
Nilton Braz
08/01/2016
Segue a expressão:
SELECT FLOOR(DATEDIFF(DAY, DataNascimento, GETDATE()) / 365.25)
Há casos em que se a pessoa faz aniversário no dia seguinte ao dia atual, a query considerando as horas irá informar como se a pessoa já tivesse feito aniversário, quando na verdade não fez (a não ser que ela seja executada exatamente no horário 00:00).
Abraço!
SELECT FLOOR(DATEDIFF(DAY, DataNascimento, GETDATE()) / 365.25)
Há casos em que se a pessoa faz aniversário no dia seguinte ao dia atual, a query considerando as horas irá informar como se a pessoa já tivesse feito aniversário, quando na verdade não fez (a não ser que ela seja executada exatamente no horário 00:00).
Abraço!
GOSTEI 1
Mais Respostas
Joaci Gomes
08/01/2016
Qual seria o contexto exatamente?
Tenta isso:
SELECT YEAR(dHoje)-YEAR(dNasc)-IIF(MONTH(dHoje)*32+DAY(dHoje)<MONTH(dNasc)*32+DAY(dNasc),1,0)
Pra ñ ter problems c/ o arredondamento, fórmulas, etc...
PS: Depois diz se deu certo?
Tenta isso:
SELECT YEAR(dHoje)-YEAR(dNasc)-IIF(MONTH(dHoje)*32+DAY(dHoje)<MONTH(dNasc)*32+DAY(dNasc),1,0)
Pra ñ ter problems c/ o arredondamento, fórmulas, etc...
PS: Depois diz se deu certo?
GOSTEI 0
Luth Ferreira
08/01/2016
Joaci, obrigado por responder, mas não entendi o porquê do 32, pois um mês não tem 32 dias.
Atenciosamente,
Atenciosamente,
GOSTEI 0
Joaci Gomes
08/01/2016
Vc pode trok o dHoje por GETDATE() (CURDATE() no MySQL) ou msmo CURRENT_TIMESTAMP qndo for aplikr na base de dad0s. Fiz c/ variáveis o exemplo p/ q se possa testr de maneira fácil usando DECLARE (mas lembre de colocar @ antes das variáveis).
Notas:
Usei 32 como multiplicador do mês apenas como boa prática (potência de 2), mas sendo de 31 pra cima está ok;
Como não consideramos hora no cálculo de idade, o IIF está ajustado p/ que o numero de anos de idade "suba" exatamente no dia do aniversário do usuário;
Lembre-se de que neste caso estamos considerando o aniversário dos nascidos em 29 de fevereiro como sendo 1 de março nos anos não bissextos. Caso prefira de outra forma provavelmente vai ter que acrescentar uma condição especial para isso;
Caso queira usar isso em outros "dialetos" de SQL, como no MySQL por exemplo, troque o IIF por IF.
Notas:
Usei 32 como multiplicador do mês apenas como boa prática (potência de 2), mas sendo de 31 pra cima está ok;
Como não consideramos hora no cálculo de idade, o IIF está ajustado p/ que o numero de anos de idade "suba" exatamente no dia do aniversário do usuário;
Lembre-se de que neste caso estamos considerando o aniversário dos nascidos em 29 de fevereiro como sendo 1 de março nos anos não bissextos. Caso prefira de outra forma provavelmente vai ter que acrescentar uma condição especial para isso;
Caso queira usar isso em outros "dialetos" de SQL, como no MySQL por exemplo, troque o IIF por IF.
GOSTEI 0
Alan Mario
08/01/2016
Como pegar esse valor e salvar, criando um novo campo?
GOSTEI 0
Luth Ferreira
08/01/2016
Obrigado galera!
GOSTEI 0