'10-MAY-20'
is geen datum, het is een string. Een datum heeft geen formaat, op basis van uw landspecifieke NLS-instellingen wordt het weergegeven in een voor mensen leesbaar formaat met behulp van TO_CHAR
en juiste formaat masker.
Vermijd ook het gebruik van tweecijferige YY
vertegenwoordiging voor het jaar, het is de hele reden Y2K fout begonnen. Gebruik altijd YYYY
formaat.
Om een string om te zetten in een datum:
Gebruik TO_DATE
en passend formaatmasker:
where date_col > TO_DATE('10-MAY-2020', 'DD-MON-YYYY')
and date_col < TO_DATE('13-MAY-2020', 'DD-MON-YYYY')
Of gebruik ANSI date literal
die een vast formaat gebruikt 'YYYY-MM-DD'
:
where date_col > DATE '2020-05-10' and date < DATE '2020-05-13'
Nog iets, DATE
is een door Oracle gereserveerd woord, kunt u de documentatie . Misschien gebruikt u identifier tussen aanhalingstekens "date"
d.w.z. dubbele aanhalingstekens gebruiken rond het gereserveerde woord.
Dat komt waarschijnlijk omdat je NLS-instellingen van SQL Developer zijn ingesteld op 'DD-MON-YY'
, dus wanneer u de datum in dat formaat doorgeeft, wordt er impliciet naar de datum geconverteerd. Als u echter het formaat wijzigt, werkt het niet:
alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';