Ngày không có định dạng - ngày là được lưu trữ nội bộ vào cơ sở dữ liệu dưới dạng 7 byte (đại diện cho năm, tháng, ngày, giờ, phút và giây) và phải đến khi bất kỳ giao diện người dùng nào bạn đang sử dụng (tức là SQL / Plus, SQL Developer, Java, v.v.) cố gắng hiển thị nó cho bạn, người dùng và chuyển đổi nó thành một cái gì đó mà bạn sẽ thấy có ý nghĩa (thường là một chuỗi) mà ngày có định dạng.
Để sửa truy vấn của bạn, bạn chỉ cần đặt chuỗi ngày trong dấu ngoặc kép và sử dụng YY
để khớp với định dạng năm gồm 2 chữ số (nếu không Oracle sẽ cho rằng 17
ở định dạng YYYY
là năm 0017
và thế kỷ sẽ không như bạn mong đợi
):
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');
Tuy nhiên, bạn cũng có thể sử dụng các ký tự ngày (và bỏ qua việc phải khớp với mô hình định dạng ngày):
select sum(TOTAL_AMOUNT)
from table a
where trn_date between DATE '2017-04-01'
AND DATE '2017-05-31';