1
resposta

Fiz de um outro jeito, porém algumas idades não ficou igual a do professor. Mas valeu a tentativa.

select nome, (datediff(current_time() , data_de_nascimento) div 365) as idade
from tabela_de_clientes;
1 resposta

Oi, Leonardo! Tudo bem?

Peço desculpas por demorar a te responder.

Quando tentamos calcular a idade a partir da função DATEDIFF e dividimos o resultado por 365, alguns valores realmente ficarão diferentes do esperado. Como nem todos os anos possuem 365 dias (vide os bissextos, que possuem 366), os cálculos efetuados desse modo serão apenas aproximados.

Por esse motivo, é mais recomendado trabalhar com a função TIMESTAMPDIFF, que lida não apenas com dias, meses e anos, mas também com outros intervalos temporais, como horas, minutos e segundos — o que garante uma maior exatidão no cálculo da diferença entre duas datas.

O seu uso pode ser feito da seguinte maneira:

SELECT NOME, TIMESTAMPDIFF(YEAR, DATA_DE_NASCIMENTO, CURRENT_DATE()) AS IDADE
FROM tabela_de_clientes;

Como segunda coluna da nossa busca, temos o seguinte trecho de código: TIMESTAMPDIFF(YEAR, DATA_DE_NASCIMENTO, CURDATE()), o qual calcula a idade dos nossos clientes. Dentro da chamada da função TIMESTAMPDIFF, temos três parâmetros:

  • YEAR: indica qual será o período de tempo do nosso retorno (em dias, meses, anos etc). A palavra “year” significa “ano” em Inglês, logo, é exatamente isso que veremos ao final!
  • DATA_DE_NASCIMENTO: será a primeira data do nosso cálculo;
  • CURRENT_DATE(): representa a data atual;

Dessa forma, a idade será calculada em anos completos, levando em consideração, inclusive, casos especiais, como os anos bissextos.

Leo, na área de banco de dados existem diferentes maneiras de solucionar o mesmo problema. Com o tempo, vamos nos aprofundando nos estudos e identificando quais delas melhor se aplicam às situações. A cada passo dado, aprendemos algo novo e ampliamos o nosso conhecimento sobre diferentes assuntos.

Continue se dedicando nos estudos! Caso surja alguma dúvida, fico à disposição.

Um forte abraço.