Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle SQL-Vergleich von DATEs gibt falsches Ergebnis zurück

Sie vergleichen zwei STRINGS . Sie müssen das DATUM vergleichen s. Wie ich bereits in der anderen Antwort hier gesagt habe, müssen Sie das Datum für DATE-Berechnungen unverändert lassen. TO_CHAR ist für die Anzeige und TO_DATE besteht darin, ein String-Literal in DATE umzuwandeln.

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') 

Außerdem ist REPORTDATE eine DATE-Spalte, daher wird es ein datetime-Element haben. Wenn Sie also das Zeitelement beim Vergleich ausschließen möchten, müssen Sie TRUNC verwenden

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

Wenden Sie jedoch TRUNC an in der Datums-Spalte würde jeden regulären Index unterdrücken auf dieser Säule. Verwenden Sie aus Leistungssicht besser eine Datumsbereichsbedingung .

Zum Beispiel

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