'10-MAY-20'
är inte ett datum, det är ett snöre. Ett datum har inget format, baserat på dina lokalspecifika NLS-inställningar visas det i ett läsbart format med TO_CHAR
och rätt formatmask.
Du bör också undvika att använda tvåsiffriga YY
representation för år, det är hela anledningen till Y2K buggen startade. Använd alltid YYYY
format.
Så här konverterar du en sträng till datum:
Använd TO_DATE
och lämplig formatmask:
where date_col > TO_DATE('10-MAY-2020', 'DD-MON-YYYY')
and date_col < TO_DATE('13-MAY-2020', 'DD-MON-YYYY')
Eller använd ANSI date literal
som använder fast format 'YYYY-MM-DD'
:
where date_col > DATE '2020-05-10' and date < DATE '2020-05-13'
En annan sak, DATE
är ett reserverat ord i Oracle kan du se dokumentationen . Du kanske använder citattecken "date"
d.v.s. att använda dubbla citattecken runt det reserverade ordet.
Det beror förmodligen på att dina NLS-inställningar för SQL Developer är inställda på 'DD-MON-YY'
, så när du passerar datumet i det formatet gör det en implicit konvertering till datum. Men om du ändrar formatet kommer det inte att fungera:
alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';