Trong Oracle, một DATE
luôn luôn có một thành phần thời gian. Máy khách của bạn có thể hiển thị hoặc không hiển thị thành phần thời gian, nhưng nó vẫn ở đó khi bạn cố gắng thực hiện một phép so sánh bình đẳng. Bạn cũng luôn muốn so sánh ngày với ngày thay vì chuỗi sử dụng NLS_DATE_FORMAT
của phiên hiện tại để thực hiện các chuyển đổi ngầm, do đó làm cho chúng trở nên khá mong manh. THat sẽ liên quan đến các ký tự ngày ANSI hoặc to_date
rõ ràng cuộc gọi
Bạn có thể sử dụng TRUNC
hàm để cắt ngắn DATE
đến nửa đêm
SELECT *
FROM porder
WHERE trunc(odate) = date '2013-10-04'
Hoặc bạn có thể thực hiện so sánh phạm vi (sẽ hiệu quả hơn nếu bạn có thể hưởng lợi từ chỉ mục trên odate
)
SELECT *
FROM porder
WHERE odate >= to_date( '04-Oct-2013', 'DD-Mon-YYYY' )
AND odate < to_date( '05-Oct-2013', 'DD-Mon-YYYY' );