'10-MAY-20'
não é uma data, é uma string. Uma data não tem nenhum formato, com base em suas configurações NLS específicas de localidade, ela é exibida em um formato legível usando TO_CHAR
e máscara de formato adequado. Além disso, você deve evitar usar dois dígitos
YY
representação por ano, esse é o motivo Y2K bug iniciado. Sempre use YYYY
formato. Para converter uma string em data:
Usar
TO_DATE
e máscara de formato apropriado:where date_col > TO_DATE('10-MAY-2020', 'DD-MON-YYYY')
and date_col < TO_DATE('13-MAY-2020', 'DD-MON-YYYY')
Ou use
ANSI date literal
que usa o formato fixo 'YYYY-MM-DD'
:where date_col > DATE '2020-05-10' and date < DATE '2020-05-13'
Outra coisa,
DATE
é uma palavra reservada da Oracle, você pode ver a documentação . Talvez você esteja usando identificador entre aspas "date"
ou seja, usando aspas duplas ao redor da palavra reservada. Provavelmente porque suas configurações de NLS do SQL Developer estão definidas como
'DD-MON-YY'
, então quando você passa a data nesse formato ele faz uma conversão implícita para data. No entanto, se você alterar o formato, não funcionará:alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';