Data nie ma formatu — jest przechowywana wewnętrznie w bazie danych jako 7-bajtowa (reprezentujące rok, miesiąc, dzień, godzinę, minutę i sekundę) i dopiero wtedy, gdy używany interfejs użytkownika (tj. SQL/Plus, SQL Developer, Java itp.) nie spróbuje go wyświetlić użytkownikowi i dokona konwersji w coś, co uznasz za sensowne (zazwyczaj ciąg), że data ma format.
Aby naprawić zapytanie, wystarczy otoczyć ciąg daty w pojedynczych cudzysłowach i użyć YY
aby dopasować dwucyfrowy format roku (w przeciwnym razie Oracle założy, że 17
w formacie YYYY
to rok 0017
a wiek nie będzie taki, jak się spodziewasz
):
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');
Możesz jednak również użyć literałów daty (i pominąć konieczność dopasowania modelu formatu daty):
select sum(TOTAL_AMOUNT)
from table a
where trn_date between DATE '2017-04-01'
AND DATE '2017-05-31';