Najprawdopodobniej problem polega na tym, że istnieje ułamkowy składnik daty, którego nie bierzesz pod uwagę. Możesz zignorować ten ułamkowy składnik daty, obcinając kolumnę w zapytaniu:
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;
Zakładam, że kolumna enroll_date
jest typu danych DATE.
Wyjaśnienie:Oracle przechowuje daty zgodnie z opisem tutaj , NIE przechowuje daty, ponieważ podajesz "Format daty, w którym się znajduje, to już DD-MON-RR". Jest to tylko format, w którym widzisz datę, który jest określany przez parametr NLS_DATE_FORMAT dla Twojej sesji.
Zróbmy szybki test z tabelą testową. Utwórz tabelę i sprawdź NLS_DATE_FORMAT z mojej sesji.
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
W ten sposób zobaczę moje daty.
SELECT * FROM date_tst;
04-OCT-2020
Więc mam dzisiejszą datę. Chłodny. Zobaczmy teraz, czy mogę wysłać zapytanie przy użyciu tej daty:
SELECT * FROM date_tst WHERE test_date = TO_DATE('04-OCT-2020','DD-MON-YYYY');
no rows.
Nie są wyświetlane żadne wiersze, ponieważ format daty, w którym otrzymuję moją datę, nie zawiera składnika czasu. DATE zawiera rok, miesiąc, dzień, godzinę, minuty i sekundy. Format ma tylko rok, miesiąc i dzień. Przeprowadź zapytanie o dane, aby sprawdzić, czy istnieje składnik czasu.
SELECT TO_CHAR(test_date,'DD-MON-YYYY HH24:MI:SS') FROM date_tst;
4-OCT-2020 21:12:39
Ach to jest... SYSDATE to aktualny czas do sekundy. Teraz spróbujmy ponownie to zapytanie z bardziej precyzyjnym formatem daty:
SELECT * FROM date_tst WHERE test_date = TO_DATE('04-OCT-2020 21:12:39','DD-MON-YYYY HH24:MI:SS');
04-OCT-2020
I oto nasza awantura. Polecenie TRUNC odetnie składnik czasu:
SELECT TO_CHAR(TRUNC(test_date),'DD-MON-YYYY HH24:MI:SS') FROM date_tst;
04-OCT-2020 00:00:00
Możesz więc uprościć zapytanie:
SELECT * FROM date_tst WHERE TRUNC(test_date) = TO_DATE('04-OCT-2020','DD-MON-YYYY');
04-OCT-2020