'10-MAY-20'
non è una data, è una stringa. Una data non ha alcun formato, in base alle impostazioni NLS specifiche per la tua locale viene visualizzata in un formato leggibile usando TO_CHAR
e maschera di formato corretto.
Inoltre, dovresti evitare di usare YY
a due cifre rappresentazione per l'anno, è l'intero motivo Y2K bug iniziato. Usa sempre YYYY
formato.
Per convertire una stringa in data:
Usa TO_DATE
e maschera di formato appropriato:
where date_col > TO_DATE('10-MAY-2020', 'DD-MON-YYYY')
and date_col < TO_DATE('13-MAY-2020', 'DD-MON-YYYY')
Oppure, usa ANSI date literal
che utilizza il formato fisso 'YYYY-MM-DD'
:
where date_col > DATE '2020-05-10' and date < DATE '2020-05-13'
Un'altra cosa, DATE
è una parola riservata Oracle, puoi vedere la documentazione . Forse stai utilizzando identificatore tra virgolette "date"
ovvero utilizzando le virgolette doppie attorno alla parola riservata.
Ciò è probabilmente dovuto al fatto che le impostazioni NLS di SQL Developer sono impostate su 'DD-MON-YY'
, quindi quando passi la data in quel formato, viene eseguita una conversione implicita alla data. Tuttavia, se cambi il formato non funzionerà:
alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';