Oracle
 sql >> Database >  >> RDS >> Oracle

Il confronto Oracle SQL di DATE restituisce un risultato errato

Stai confrontando due STRINGS . Devi confrontare la DATA S. Come ho già detto nell'altra risposta qui, è necessario lasciare la data così com'è per i calcoli DATE. TO_CHAR è per la visualizzazione e TO_DATE è convertire una stringa letterale in DATE.

SELECT TO_CHAR(REPORTDATE, 'DD.MM.YYYY'),
  COUNT(*)
FROM TABLE
WHERE REPORTDATE > TO_DATE('09.11.2013', 'DD.MM.YYYY')
GROUP BY TO_CHAR(REPORTDATE, 'DD.MM.YYYY') 

Inoltre, REPORTDATE è una colonna DATE, quindi avrà un elemento datetime. Quindi, se vuoi escludere l'elemento temporale durante il confronto, devi utilizzare TRUNC

WHERE TRUNC(REPORTDATE) > TO_DATE('09.11.2013', 'DD.MM.YYYY')

Tuttavia, applicando TRUNC alla data colonna sopprimerebbe qualsiasi indice regolare su quella colonna. Dal punto di vista delle prestazioni, utilizza meglio una condizione dell'intervallo di date .

Ad esempio,

WHERE REPORTDATE
BETWEEN 
        TO_DATE('09.11.2013', 'DD.MM.YYYY')
AND     
        TO_DATE('09.11.2013', 'DD.MM.YYYY') +1