Então é *** EXATAMENTE *** o que eu disse, o ERRO da tua lógica é que dtsaida é 
uma data DO PASSADo (ou no máximo igual a data de hoje), então *** NUNCA VAI 
FICAR NEGATIVO **, captou ?? Em cima do meu exemplo :


scott@BD_TESTE:SQL>select codprod, dtsaida, prazogarantia, sysdate - dtsaida 
qtd_dias from TAB_TESTE_GARANTIA;

  CODPROD DTSAIDA             PRAZOGARANTIA  QTD_DIAS
--------- ------------------- ------------- ---------
        1 05/01/2018 00:00:00            90 31,661065
        2 05/01/2015 00:00:00           100 1127,6611

scott@BD_TESTE:SQL>

==> É SIMPLES o case que diz se está ou não em garantia, é quando QTD_DIAS 
decorrido desde a venda é MENOR OU IGUAL ao PRAZOGARANTIA :

scott@BD_TESTE:SQL>ed
Gravou file afiedt.buf

  1  select codprod, dtsaida, prazogarantia,
  2   (sysdate - dtsaida) qtd_dias,
  3   case when (sysdate - dtsaida) <= prazogarantia then 'Está em garantia!!'
  4         else 'Venceu a garantia!!' end AS STATUS
  5*  from TAB_TESTE_GARANTIA
scott@LOWELL:Lowell-DESENV:SQL>/

  CODPROD DTSAIDA             PRAZOGARANTIA  QTD_DIAS STATUS
--------- ------------------- ------------- --------- -------------------
        1 05/01/2018 00:00:00            90 31,748808 Está em garantia!!
        2 05/01/2015 00:00:00           100 1127,7488 Venceu a garantia!!

scott@BD_TESTE:SQL>

c.q.d.

  []s
  
    Chiappa

Responder a