Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Porównanie dat w Oracle SQL zwraca błędny wynik

Porównujesz dwa STRINGS . Musisz porównać DATĘ s. Jak już powiedziałem w drugiej odpowiedzi tutaj, musisz zostawić datę tak, jak jest dla obliczeń DATE. TO_CHAR jest do wyświetlania i TO_DATE jest konwersja literału napisowego na 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') 

Ponadto REPORTDATE jest kolumną DATE, dlatego będzie zawierała element datetime. Jeśli więc chcesz wykluczyć element czasu podczas porównywania, musisz użyć TRUNC

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

Jednak zastosowanie TRUNC w dniu kolumna pominie każdy zwykły indeks na tej kolumnie. Z punktu widzenia wydajności lepiej użyj warunku zakresu dat .

Na przykład

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Indeksy baz danych B-Tree vs Bitmap

  2. Utwórz unikalny klucz podstawowy (hash) z kolumn bazy danych

  3. czy możemy wykonać polecenie uniksowe z procedury oracle10g?

  4. Wiele wierszy wartości w jednym wierszu

  5. Od XML do listy ścieżek w Oracle 12c