Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

A comparação Oracle SQL de DATEs retorna resultado errado


Você está comparando duas STRINGS . Você precisa comparar a DATA s. Como já disse na outra resposta aqui, você precisa deixar a data como está para os cálculos de DATE. TO_CHAR é para exibição e TO_DATE é converter um literal de string em 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') 

Além disso, REPORTDATE é uma coluna DATE, portanto, terá o elemento datetime. Portanto, se você quiser excluir o elemento de tempo durante a comparação, precisará usar TRUNC
WHERE TRUNC(REPORTDATE) > TO_DATE('09.11.2013', 'DD.MM.YYYY')

No entanto, aplicar TRUNC na data coluna suprimiria qualquer índice regular nessa coluna. Do ponto de vista do desempenho, é melhor usar uma condição de período .

Por exemplo,
WHERE REPORTDATE
BETWEEN 
        TO_DATE('09.11.2013', 'DD.MM.YYYY')
AND     
        TO_DATE('09.11.2013', 'DD.MM.YYYY') +1