Không. Ngày / Dấu thời gian không có bất kỳ định dạng nào . Oracle không lưu trữ ngày tháng / dấu thời gian ở định dạng bạn thấy. Định dạng bạn thấy chỉ dành cho hiển thị mục đích. Ngày được lưu trữ nội bộ trong 7 byte, đây là định dạng độc quyền của Oracle .
Tất nhiên bạn có thể. Bạn có thể sử dụng TRUNC sẽ cắt bớt phần thời gian và chỉ để lại phần ngày và kiểu dữ liệu vẫn là ngày.
Ví dụ:
SQL> SELECT TRUNC(SYSTIMESTAMP) my_tmstmp FROM DUAL;
MY_TMSTMP
----------
2015-05-29
Vì vậy, bạn nhận được đầu vào của người dùng ở định dạng đó dưới dạng chuỗi . Trước tiên, bạn cần chuyển đổi nó vào DATE bằng TO_DATE và sau đó so sánh nó.
Ví dụ:
WHERE TRUNC(dt_column) < TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS')
Như tôi đã nói, nếu bạn muốn bỏ qua phần thời gian, hãy áp dụng TRUNC .
Tuy nhiên, việc áp dụng TRUNC vào ngày cột sẽ ngăn chặn bất kỳ chỉ mục thông thường nào trên cột đó. Từ quan điểm hiệu suất, tốt hơn hãy sử dụng Điều kiện phạm vi ngày .
Ví dụ:
WHERE dt_column
BETWEEN
TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS')
AND
TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS') +1