Có chức năng nào được tích hợp trong Oracle sẽ trả về ngày có thể cao nhất có thể được chèn vào trường ngày không?Làm thế nào để bạn có được ngày tối đa có thể có trong Oracle?
Trả lời
SELECT TO_DATE('31.12.9999 23:59:59', 'dd.mm.yyyy hh24:mi:ss')
FROM dual
Lưu ý rằng ngày tối thiểu là đơn giản hơn nhiều:
SELECT TO_DATE(1, 'J')
FROM dual
Tôi nghĩ rằng cho hầu hết các mục đích của mọi người 'TO_DATE ('9999', 'yyyy')' sẽ là một lựa chọn ngắn hơn và chấp nhận được nhiều hơn, đặc biệt khi sử dụng để kết hợp các giá trị rỗng so sánh. – Alex
@ Alex: Có, nhưng op đã yêu cầu "ngày có thể tối đa". – Quassnoi
Tôi biết. Chỉ cần thêm 2 xu của tôi với hy vọng nó sẽ giúp ai đó. – Alex
Tôi không biết của một hàm nhưng theo this article:
Oracle 7: từ tháng 1, 4712 TCN đến ngày 31 tháng 12 năm 4712 sau Công nguyên.
Oracle 8: từ ngày 1 tháng 1 năm 4712 trước công nguyên đến ngày 31 tháng 12 năm 9999 sau Công nguyên.
Oracle 9: từ ngày 1 tháng 1 năm 4712 trước công nguyên đến ngày 31 tháng 12 năm 9999 sau Công nguyên.
PL/SQL: từ ngày 1 tháng 1 năm 4712 trước công nguyên đến ngày 31 tháng 12 năm 9999 sau Công nguyên.
Từ các tài liệu 11g:
Oracle Database có thể lưu trữ ngày trong thời đại Julian, dao động từ 1 tháng 1, 4712 TCN đến hết tháng 31, 9999 CE (Common Era, hoặc 'AD').
http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#i1847
Một cách khác nhau, chỉ để cho vui:
SELECT to_date(5373484, 'J') + (1 - 1/24/60/60)
FROM dual;
SELECT date '9999-12-31' + (1 - 1/24/60/60)
FROM dual;
Truy vấn đầu tiên phải là 'SELECT to_date (5373484, 'J') + (1 - 1/24/60/60) TỪ kép;' –
Trong định dạng Julian (JDDD) ngày max Oracle là 2086307365.
Tại sao? Nếu bạn bắt đầu đặt các giá trị giả 'ngày cao' vào một bảng, nó có thể 'gây nhầm lẫn' trình tối ưu hóa sẽ giả định rằng bạn có một phạm vi toàn bộ các giá trị ngày tháng trải rộng trong vòng 8 nghìn năm tới. –