Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Resolução - combinar funções de data com outras funções

Boa noite!

SELECT
    ID_EMPRESTIMO,
    TO_CHAR(DATAINICIO, 'DD/MM/YYYY') AS DATAINICIAL,
    PRAZO,
    TO_CHAR((DATAINICIO + PRAZO), 'DD/MM/YYYY') AS DATAFINAL,
    CASE
        WHEN (DATAINICIO + PRAZO) < SYSDATE THEN 'Vencido'
        ELSE 'No prazo'
    END AS STATUSEMPRESTIMO
FROM
    TABELAEMPRESTIMO
ORDER BY (DATAINICIO + PRAZO) ASC;

No caso, no momento da execução do teste, o SYSDATE é 07/04/2026, sendo este o parâmetro para se saber o que está vencido e o que está no prazo.
Também fiz uma pequena modificação no exercício, que foi alterar a 'DATAINICIO' do empréstimo de código 'E05', para contemplarmos também um registro 'No prazo' no resultado.

A saída do comando acima foi a seguinte:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas
solução!

Ei, tudo bem?

Ótima solução, parabéns, está bem aplicada!

Foi uma ótima ideia ajustar a data do registro E05 para conseguir visualizar também um caso como "No prazo", isso ajuda bastante na validação da lógica.

Para complementar, para não repetir a expressão (DATAINICIO + PRAZO) várias vezes, experimente usar uma subquery ou alias, por exemplo:

SELECT
    ID_EMPRESTIMO,
    DATAINICIAL,
    PRAZO,
    DATAFINAL,
    CASE
        WHEN DATAFINAL < SYSDATE THEN 'Vencido'
        ELSE 'No prazo'
    END AS STATUSEMPRESTIMO
FROM (
    SELECT
        ID_EMPRESTIMO,
        TO_CHAR(DATAINICIO, 'DD/MM/YYYY') AS DATAINICIAL,
        PRAZO,
        DATAINICIO + PRAZO AS DATAFINAL
    FROM TABELAEMPRESTIMO
)
ORDER BY DATAFINAL ASC;

Assim você calcula a data final uma única vez e reaproveita depois.

Continue assim, se dedicando aos estudos e praticando, é importante para o seu desenvolvimento!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Boa tarde, Nathalia!

Obrigado por compartilhar, gostei de sua dica utilizando subconsulta.