SELECT
p.id_emprestimo AS id_emprestimo
, CASE
WHEN DATEDIFF(CURRENT_DATE(), DATE_ADD(p.DataInicio, INTERVAL p.Prazo DAY)) > 0 THEN 'Vencido'
ELSE 'No prazo'
END AS status_emprestimo
FROM tabelaemprestimo AS p
;
SELECT
p.id_emprestimo AS id_emprestimo
, CASE
WHEN DATEDIFF(CURRENT_DATE(), DATE_ADD(p.DataInicio, INTERVAL p.Prazo DAY)) > 0 THEN 'Vencido'
ELSE 'No prazo'
END AS status_emprestimo
FROM tabelaemprestimo AS p
;
Oi, Carlos Eduardo! Como vai?
Agradeço por compartilhar sua resolução de exercício com a comunidade Alura.
Sua solução ficou muito bem estruturada. Você utilizou o SELECT com CASE, WHEN, DATEDIFF e DATE_ADD de forma integrada para identificar o status de cada empréstimo. A lógica de calcular a data limite somando o campo DataInicio ao Prazo em dias com o INTERVAL DAY ficou clara e organizada.
Outro ponto positivo foi o uso do CURRENT_DATE() na comparação com DATEDIFF, garantindo que o status do id_emprestimo seja avaliado sempre com base na data atual do sistema. Isso torna a consulta dinâmica e confiável.
Compartilho também a função CURDATE() como alternativa ao CURRENT_DATE(), já que ambas retornam a data atual no MySQL. Veja este exemplo:
SELECT
id_emprestimo,
CURDATE() AS data_atual
FROM tabelaemprestimo;
Neste exemplo, o código exibe a data atual do sistema junto ao identificador do empréstimo, o que pode ajudar em testes e validações de consultas envolvendo datas. As duas formas são equivalentes, e conhecer ambas amplia seu repertório na escrita de consultas SQL.
Você já utilizou funções de data em outros contextos no SQL, como controle de atrasos, validade de produtos ou agendamentos?