oracle sql Datum Vergleich funktioniert nicht wie erwartet
Ich habe eine Tabelle X mit 'insert_date' - Spalte. Diese Spalte ist od Typ DATUM und enthält nur einen Wert für alle Datensätze: "17-JAN-13". Ich würde erwarten, dass die folgende Abfrage keine Ergebnisse:
SELECT insert_date
FROM X
WHERE ("X"."INSERT_DATE" IS NOT NULL
AND NOT (("X"."INSERT_DATE" = to_date('2013-01-17', 'yyyy-mm-dd')
)))
Aber was ich bekomme ist statt dessen viele "17-JAN-13" - Einträge.
Was ist falsch mit meiner Abfrage?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oracle
DATE
Spalten enthalten, eine Zeit, wie gut (trotz Ihres namens). Ihre vorhandenen Zeilen wahrscheinlich eine Zeit, anders als00:00:00
(was ist "zugewiesen", um das Datum, die Sie erstellen, mit derto_date()
- Funktion).Müssen Sie "entfernen" die Zeit, die Teil der Spalte mit
trunc()
obwohl ich würde es vorziehen, zu verwenden
<>
statt derNOT
Betreiber:(aber das ist nur eine persönlichen Vorliebe. Ich denke, es macht den Zustand leichter zu Lesen).
Damit deine komplette Aussage wäre:
to_char()
mit einem geeigneten format Maske oder ändern Sie die display-Einstellungen für Ihren SQL-clienttrunc()
wird impact index verwenden; ich würde es vorziehen(X.INSERT_DATE < to_date('2013-01-17', 'yyyy-mm-dd') or X.INSERT_DATE >= to_date('2013-01-18', 'yyyy-mm-dd'))
, aber es ist immer ein bisschen chaotisch...trunc(INSERT_DATE)
welches verwendet wird, dann (vorausgesetzt, es genügend "reduziert" die Anzahl der zurückgegebenen Zeilen)Können Sie entweder kürzen Sie die Zeit Teil, während vergleichen oder sonst extrahieren Sie nur die gewünschten Teile ich.e
DD-MON-YYYY
wie