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

SQL-Abfrage mit zwei Daten

'10-MAY-20' ist kein Datum, sondern eine Zeichenfolge. Ein Datum hat kein Format, basierend auf Ihren gebietsschemaspezifischen NLS-Einstellungen wird es in einem für Menschen lesbaren Format mit TO_CHAR angezeigt und richtige Formatmaske.

Außerdem sollten Sie die Verwendung des zweistelligen YY vermeiden Darstellung für Jahr, es ist der ganze Grund Y2K Fehler gestartet. Verwenden Sie immer YYYY formatieren.

Um eine Zeichenkette in ein Datum umzuwandeln:

Verwenden Sie TO_DATE und entsprechende Formatmaske:

where  date_col > TO_DATE('10-MAY-2020', 'DD-MON-YYYY')  
and    date_col < TO_DATE('13-MAY-2020', 'DD-MON-YYYY')

Oder verwenden Sie ANSI date literal das das feste Format 'YYYY-MM-DD' verwendet :

where  date_col > DATE '2020-05-10' and date < DATE '2020-05-13'

Eine andere Sache, DATE ein von Oracle reserviertes Wort ist, können Sie die Dokumentation . Möglicherweise verwenden Sie Bezeichner in Anführungszeichen "date" d.h. die Verwendung von doppelten Anführungszeichen um das reservierte Wort.

Das liegt wahrscheinlich daran, dass Ihre NLS-Einstellungen von SQL Developer auf 'DD-MON-YY' eingestellt sind , wenn Sie also das Datum in diesem Format übergeben, wird es implizit in das Datum konvertiert. Wenn Sie jedoch das Format ändern, funktioniert es nicht:

alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';