'10-MAY-20'
không phải là một ngày, nó là một chuỗi. Một ngày không có bất kỳ định dạng nào, dựa trên cài đặt NLS dành riêng cho ngôn ngữ của bạn, ngày được hiển thị ở định dạng con người có thể đọc được bằng cách sử dụng TO_CHAR
và mặt nạ định dạng thích hợp.
Ngoài ra, bạn nên tránh sử dụng YY
có hai chữ số đại diện cho năm, đó là toàn bộ lý do Y2K lỗi bắt đầu. Luôn sử dụng YYYY
định dạng.
Để chuyển đổi một chuỗi thành ngày tháng:
Sử dụng TO_DATE
và mặt nạ định dạng thích hợp:
where date_col > TO_DATE('10-MAY-2020', 'DD-MON-YYYY')
and date_col < TO_DATE('13-MAY-2020', 'DD-MON-YYYY')
Hoặc, sử dụng ANSI date literal
sử dụng định dạng cố định 'YYYY-MM-DD'
:
where date_col > DATE '2020-05-10' and date < DATE '2020-05-13'
Một điều khác, DATE
là một từ dành riêng của Oracle, bạn có thể xem tài liệu . Có lẽ, bạn đang sử dụng số nhận dạng được trích dẫn "date"
tức là sử dụng dấu ngoặc kép xung quanh từ dành riêng.
Đó có thể là do cài đặt NLS của Nhà phát triển SQL của bạn được đặt thành 'DD-MON-YY'
, vì vậy khi bạn chuyển ngày ở định dạng đó, nó không phải là một chuyển đổi ngầm định sang ngày. Tuy nhiên, nếu bạn thay đổi định dạng, nó sẽ không hoạt động:
alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';