Uma data não tem um formato - ela é armazenada internamente no banco de dados como 7 bytes (representando ano, mês, dia, hora, minuto e segundo) e não é até que qualquer interface de usuário que você esteja usando (ou seja, SQL/Plus, SQL Developer, Java, etc.) em algo que você acharia significativo (geralmente uma string) que a data tem um formato.
Para corrigir sua consulta, basta colocar a string de data entre aspas simples e usar
YY
para corresponder ao formato de ano de 2 dígitos (caso contrário, a Oracle assumirá que 17
no formato YYYY
é o ano 0017
e o século não será como você espera
):select sum(TOTAL_AMOUNT)
from table a
where trn_date between TO_DATE('01-APR-17', 'DD-MON-YY')
AND TO_DATE('31-MAR-17', 'DD-MON-YY');
No entanto, você também pode usar literais de data (e pular a necessidade de corresponder ao modelo de formato de data):
select sum(TOTAL_AMOUNT)
from table a
where trn_date between DATE '2017-04-01'
AND DATE '2017-05-31';