Oracle
 sql >> Base de données >  >> RDS >> Oracle

Requête SQL utilisant deux dates

'10-MAY-20' n'est pas une date, c'est une chaîne. Une date n'a pas de format, en fonction de vos paramètres NLS spécifiques aux paramètres régionaux, elle est affichée dans un format lisible par l'homme en utilisant TO_CHAR et masque de format approprié.

Aussi, vous devriez éviter d'utiliser deux chiffres YY représentation pour l'année, c'est toute la raison Y2K bogue a commencé. Utilisez toujours YYYY formater.

Pour convertir une chaîne en date :

Utilisez TO_DATE et masque de format approprié :

where  date_col > TO_DATE('10-MAY-2020', 'DD-MON-YYYY')  
and    date_col < TO_DATE('13-MAY-2020', 'DD-MON-YYYY')

Ou, utilisez ANSI date literal qui utilise le format fixe 'YYYY-MM-DD' :

where  date_col > DATE '2020-05-10' and date < DATE '2020-05-13'

Autre chose, DATE est un mot réservé Oracle, vous pouvez consulter la documentation . Vous utilisez peut-être un identifiant entre guillemets "date" c'est-à-dire en utilisant des guillemets autour du mot réservé.

C'est probablement parce que vos paramètres NLS de SQL Developer sont définis sur 'DD-MON-YY' , ainsi, lorsque vous transmettez la date dans ce format, une conversion implicite en date est effectuée. Cependant, si vous modifiez le format, cela ne fonctionnera pas :

alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';