'10-MAY-20'
není datum, je to řetězec. Datum nemá žádný formát, na základě vašeho národního nastavení NLS se zobrazuje ve formátu čitelném pro člověka pomocí TO_CHAR
a masku správného formátu.
Také byste se neměli používat dvoumístné YY
zastoupení za rok, to je celý důvod Y2K chyba začala. Vždy používejte YYYY
formát.
Chcete-li převést řetězec na datum:
Použijte TO_DATE
a masku vhodného formátu:
where date_col > TO_DATE('10-MAY-2020', 'DD-MON-YYYY')
and date_col < TO_DATE('13-MAY-2020', 'DD-MON-YYYY')
Nebo použijte ANSI date literal
který používá pevný formát 'YYYY-MM-DD'
:
where date_col > DATE '2020-05-10' and date < DATE '2020-05-13'
Další věc, DATE
je vyhrazené slovo Oracle, můžete si prohlédnout dokumentaci . Možná používáte uvedený identifikátor "date"
tj. pomocí dvojitých uvozovek kolem vyhrazeného slova.
Je to pravděpodobně proto, že vaše nastavení NLS SQL Developer je nastaveno na 'DD-MON-YY'
, takže když předáte datum v tomto formátu, provede se implicitní převod na datum. Pokud však změníte formát, nebude to fungovat:
alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';