'10-MAY-20'
er ikke en dato, det er en snor. En dato har ikke noget format, baseret på dine lokalitetsspecifikke NLS-indstillinger vises den i et menneskeligt læsbart format ved hjælp af TO_CHAR
og korrekt formatmaske.
Du bør også undgå at bruge tocifret YY
repræsentation for år, det er hele grunden til Y2K fejl startet. Brug altid YYYY
format.
Sådan konverteres en streng til dato:
Brug TO_DATE
og passende formatmaske:
where date_col > TO_DATE('10-MAY-2020', 'DD-MON-YYYY')
and date_col < TO_DATE('13-MAY-2020', 'DD-MON-YYYY')
Eller brug ANSI date literal
som bruger fast format 'YYYY-MM-DD'
:
where date_col > DATE '2020-05-10' and date < DATE '2020-05-13'
En anden ting, DATE
er et Oracle reserveret ord, kan du se dokumentationen . Måske bruger du anført id "date"
dvs. at bruge dobbelte anførselstegn omkring det reserverede ord.
Det er sandsynligvis fordi dine NLS-indstillinger for SQL Developer er indstillet til 'DD-MON-YY'
, så når du passerer datoen i det format, foretager det en implicit konvertering til dato. Men hvis du ændrer formatet, virker det ikke:
alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';