Oracle
 sql >> Base de données >  >> RDS >> Oracle

La comparaison Oracle SQL des DATE renvoie un résultat erroné

Vous comparez deux STRINGS . Vous devez comparer la DATE s. Comme je l'ai déjà dit dans l'autre réponse ici, vous devez laisser la date telle quelle pour les calculs DATE. TO_CHAR est pour l'affichage, et TO_DATE est de convertir une chaîne littérale en 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') 

De plus, REPORTDATE est une colonne DATE, elle aura donc un élément datetime. Donc, si vous souhaitez exclure l'élément de temps lors de la comparaison, vous devez utiliser TRUNC

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

Cependant, l'application de TRUNC à la date colonne supprimerait tout index régulier sur cette colonne. Du point de vue des performances, mieux vaut utiliser une condition de plage de dates .

Par exemple,

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