to_date()
trả về một ngày lúc 00:00:00, vì vậy bạn cần "xóa" số phút của ngày bạn đang so sánh với:
select *
from table
where trunc(es_date) = TO_DATE('27-APR-12','dd-MON-yy')
Bạn có thể muốn tạo chỉ mục trên trunc(es_date)
nếu đó là điều bạn đang làm một cách thường xuyên.
Chữ '27-APR-12'
có thể bị lỗi rất dễ dàng nếu định dạng ngày mặc định được thay đổi thành bất kỳ thứ gì khác. Vì vậy, hãy đảm bảo rằng bạn luôn sử dụng to_date()
với mặt nạ định dạng thích hợp (hoặc chữ ANSI:date '2012-04-27'
)
Mặc dù bạn đã làm đúng khi sử dụng to_date()
và không dựa vào chuyển đổi kiểu dữ liệu hoàn toàn, việc sử dụng to_date () của bạn vẫn có một lỗi nhỏ do định dạng 'dd-MON-yy'
.
Với một cài đặt ngôn ngữ khác, điều này có thể dễ dàng bị lỗi, ví dụ:TO_DATE('27-MAY-12','dd-MON-yy')
khi NLS_LANG được đặt thành tiếng Đức. Tránh bất kỳ thứ gì có định dạng có thể khác với ngôn ngữ khác. Sử dụng năm bốn chữ số và chỉ các số, ví dụ:'dd-mm-yyyy'
hoặc 'yyyy-mm-dd'