sql >> Base de Datos >  >> RDS >> Oracle

La comparación de Oracle SQL de FECHAS devuelve un resultado incorrecto

Estás comparando dos STRINGS . Necesitas comparar la FECHA s. Como ya dije en la otra respuesta aquí, debe dejar la fecha tal como está para los cálculos de FECHA. TO_CHAR es para mostrar, y TO_DATE es convertir un literal de cadena en FECHA.

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') 

Además, REPORTDATE es una columna de FECHA, por lo que tendrá un elemento de fecha y hora. Por lo tanto, si desea excluir el elemento de tiempo durante la comparación, debe usar TRUNC

WHERE TRUNC(REPORTDATE) > TO_DATE('09.11.2013', 'DD.MM.YYYY')

Sin embargo, aplicando TRUNC en la columna de la fecha suprimiría cualquier índice regular en esa columna. Desde el punto de vista del rendimiento, es mejor usar una condición de intervalo de fechas .

Por ejemplo,

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