Oracle
 sql >> Database >  >> RDS >> Oracle

Query SQL utilizzando due date

'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';