Hầu hết có thể vấn đề là có một thành phần ngày phân số mà bạn không tính đến. Bạn có thể bỏ qua thành phần ngày phân số đó bằng cách cắt bớt cột trong truy vấn của mình:
SELECT section_id, COUNT(student_id) "ENROLLED"
FROM enrollment
WHERE TRUNC(enroll_date) = TO_DATE('2/10/2007', 'MM/DD/YYYY')
GROUP BY section_id
ORDER BY ENROLLED;
Tôi giả định rằng cột enroll_date
thuộc loại dữ liệu DATE.
Một số giải thích:Oracle lưu trữ các ngày như được mô tả tại đây , nó KHÔNG lưu trữ ngày như bạn nêu "Định dạng ngày của nó đã là DD-MON-YY.". Đó chỉ là định dạng bạn thấy ngày, được xác định bởi tham số NLS_DATE_FORMAT cho phiên của bạn.
Hãy làm một bài kiểm tra nhanh với một bảng kiểm tra. Tạo bảng và kiểm tra biểu mẫu NLS_DATE_FORMAT phiên của tôi.
create table DATE_TST
( id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
test_date DATE
);
INSERT INTO date_tst (test_date) VALUES (SYSDATE);
SELECT value
FROM nls_session_parameters
WHERE parameter = 'NLS_DATE_FORMAT';
DD-MON-YYYY
Đây là cách tôi xem ngày tháng của mình.
SELECT * FROM date_tst;
04-OCT-2020
Vì vậy, tôi phải hẹn hò ngày nay. Mát mẻ. Bây giờ, hãy xem liệu tôi có thể truy vấn bằng ngày đó không:
SELECT * FROM date_tst WHERE test_date = TO_DATE('04-OCT-2020','DD-MON-YYYY');
no rows.
Không có hàng nào được hiển thị vì định dạng ngày mà tôi lấy ngày của mình không có thành phần thời gian. DATE có Năm, tháng, ngày, giờ, phút và giây. Định dạng chỉ có năm, tháng và ngày. Hãy truy vấn dữ liệu để kiểm tra xem có thành phần thời gian không.
SELECT TO_CHAR(test_date,'DD-MON-YYYY HH24:MI:SS') FROM date_tst;
4-OCT-2020 21:12:39
À đây rồi ... SYSDATE là thời gian hiện tại tính đến giây. Bây giờ, hãy thử lại truy vấn đó với định dạng ngày chính xác hơn:
SELECT * FROM date_tst WHERE test_date = TO_DATE('04-OCT-2020 21:12:39','DD-MON-YYYY HH24:MI:SS');
04-OCT-2020
Và có hàng của chúng tôi. Lệnh TRUNC sẽ cắt thành phần thời gian:
SELECT TO_CHAR(TRUNC(test_date),'DD-MON-YYYY HH24:MI:SS') FROM date_tst;
04-OCT-2020 00:00:00
Vì vậy, bạn có thể đơn giản hóa truy vấn của mình:
SELECT * FROM date_tst WHERE TRUNC(test_date) = TO_DATE('04-OCT-2020','DD-MON-YYYY');
04-OCT-2020