Du sammenligner to STRINGS . Du skal sammenligne DATE s. Som jeg allerede sagde i det andet svar her, skal du lade datoen være som den er for DATO-beregninger. TO_CHAR er til visning og TO_DATE er at konvertere en streng til 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')
REPORTDATE er også en DATE-kolonne, og derfor vil den have datetime-element. Så hvis du vil udelukke tidselementet, mens du sammenligner, skal du bruge TRUNC
WHERE TRUNC(REPORTDATE) > TO_DATE('09.11.2013', 'DD.MM.YYYY')
Anvendelse af TRUNC på dato kolonnen ville undertrykke ethvert almindeligt indeks på den kolonne. Ud fra et ydeevnesynspunkt er det bedre at bruge en datointervalbetingelse .
For eksempel,
WHERE REPORTDATE
BETWEEN
TO_DATE('09.11.2013', 'DD.MM.YYYY')
AND
TO_DATE('09.11.2013', 'DD.MM.YYYY') +1