Най-вероятно проблемът е, че има компонент с частична дата, който не вземате предвид. Можете да пренебрегнете този компонент на дробна дата, като съкратите колоната в заявката си:
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;
Предполагам, че колоната enroll_date
е от типа данни ДАТА.
Някои обяснения:Oracle съхранява дати, както е описано тук , той НЕ съхранява дата, тъй като заявявате „Форматът на датата, в който вече е DD-MON-YY.“. Това е само форматът, в който виждате датата, която се определя от параметъра NLS_DATE_FORMAT за вашата сесия.
Нека направим бърз тест с тестова таблица. Създайте таблица и проверете NLS_DATE_FORMAT от моята сесия.
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
Ето как ще виждам датите си.
SELECT * FROM date_tst;
04-OCT-2020
Така че имам днешната дата. Готино. Сега да видим дали мога да направя заявка, използвайки тази дата:
SELECT * FROM date_tst WHERE test_date = TO_DATE('04-OCT-2020','DD-MON-YYYY');
no rows.
Не се показват редове, защото форматът на датата, в който получавам датата си, няма компонент за време. ДАТА има година, месец, ден, час, минута и секунди. Форматът има само година, месец и ден. Нека направим запитване към данните, за да проверим дали има времеви компонент.
SELECT TO_CHAR(test_date,'DD-MON-YYYY HH24:MI:SS') FROM date_tst;
4-OCT-2020 21:12:39
А, ето го... SYSDATE е текущият час до секунда. Сега нека опитаме тази заявка отново с по-точен формат на датата:
SELECT * FROM date_tst WHERE test_date = TO_DATE('04-OCT-2020 21:12:39','DD-MON-YYYY HH24:MI:SS');
04-OCT-2020
И там е нашият ред. Командата TRUNC ще отреже времевия компонент:
SELECT TO_CHAR(TRUNC(test_date),'DD-MON-YYYY HH24:MI:SS') FROM date_tst;
04-OCT-2020 00:00:00
Така че можете да опростите заявката си:
SELECT * FROM date_tst WHERE TRUNC(test_date) = TO_DATE('04-OCT-2020','DD-MON-YYYY');
04-OCT-2020