Ett datum har inget format - det är lagrat internt i databasen som 7-byte (representerar år, månad, dag, timme, minut och sekund) och det är inte förrän vilket användargränssnitt du än använder (t.ex. SQL/Plus, SQL Developer, Java, etc) försöker visa det för dig, användaren, och konverterar det till något du skulle tycka är meningsfullt (vanligtvis en sträng) att datumet har ett format.
För att fixa din fråga behöver du bara omge datumsträngen med enkla citattecken och använda YY
för att matcha det tvåsiffriga årsformatet (annars kommer Oracle att anta att 17
i formatet YYYY
är årtalet 0017
och århundradet kommer inte att bli som du förväntar dig
):
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');
Du kan dock även använda datumbokstav (och hoppa över att behöva matcha datumformatmodellen):
select sum(TOTAL_AMOUNT)
from table a
where trn_date between DATE '2017-04-01'
AND DATE '2017-05-31';