Bạn đang so sánh hai STRINGS . Bạn cần so sánh DATE S. Như tôi đã nói trong câu trả lời khác ở đây, bạn cần giữ nguyên ngày cho phép tính DATE. TO_CHAR dành cho hiển thị và TO_DATE là chuyển đổi một chuỗi ký tự thành DATE.
SELECT TO_CHAR(REPORTDATE, 'DD.MM.YYYY'),
COUNT(*)
FROM TABLE
WHERE REPORTDATE > TO_DATE('09.11.2013', 'DD.MM.YYYY')
GROUP BY TO_CHAR(REPORTDATE, 'DD.MM.YYYY')
Ngoài ra, REPORTDATE là cột DATE, do đó nó sẽ có phần tử datetime. Vì vậy, nếu bạn muốn loại trừ yếu tố thời gian trong khi so sánh, bạn cần sử dụng TRUNC
WHERE TRUNC(REPORTDATE) > TO_DATE('09.11.2013', 'DD.MM.YYYY')
Tuy nhiên, việc áp dụng TRUNC vào ngày cột sẽ ngăn chặn bất kỳ chỉ mục thông thường nào trên cột đó. Từ quan điểm hiệu suất, tốt hơn hãy sử dụng Điều kiện phạm vi ngày .
Ví dụ:
WHERE REPORTDATE
BETWEEN
TO_DATE('09.11.2013', 'DD.MM.YYYY')
AND
TO_DATE('09.11.2013', 'DD.MM.YYYY') +1