Sie sollten immer Daten mit Daten vergleichen (Äpfel mit Äpfeln...) und nicht auf implizite Konvertierungen verlassen.
Da TRUNC(date)
ein Datum zurückgibt, sollten Sie es mit einem Datum vergleichen:
select id, trunc(stdate) from table_name where trunc(stdate) = DATE '2009-02-05'
oder
select id, trunc(stdate)
from table_name
where trunc(stdate) = TO_DATE('05-FEB-09', 'DD-MON-RR'))
Aktualisierung als Antwort auf Igors ersten Kommentar:
Sich auf die implizite Datenkonvertierung zu verlassen, macht das Ergebnis der Abfrage von mehreren Sitzungsparametern abhängig. Einer dieser Parameter muss geändert worden sein, wenn Sie jetzt verschiedene Ergebnisse sehen als an den Tagen zuvor. Sie können Ihre Abfrage "session-unabhängig" machen, indem Sie nicht auf implizite Konvertierungen verlassen.
Es lohnt sich zu betonen, dass Ihre erste Abfrage von den Parametern der Client-Sitzung abhängt. Wenn die Sitzung ihre Standarddatum Anzeigeeinstellung NLS_DATE_FORMAT
ändert, wird Ihre Abfrage nicht die gleichen Ergebnisse zurückgeben.
In ähnlicher Weise ist DD-MON-RR
ein vollkommen akzeptables Datumsformat für Display, aber es ist nicht gut geeignet für die Verwendung in Ihrem Code, da es eine Mehrdeutigkeit hinsichtlich des Jahrhunderts gibt und Sie auf den Parameter NLS_DATE_LANGUAGE für die Monate verlassen.