sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL:filtrar un rango de fechas

Tu solución está bien. Sin embargo, si las fechas son literales, preferiría:

WHERE datefield >= '2010-01-01 00:00:00' 
 AND  datefield <  '2012-01-01 00:00:00'

Esto funciona exactamente igual, pero es más fácil de mantener, porque deja en claro el punto de que cada "fecha" literal es una marca de tiempo, no una fecha. Por ejemplo, suponga que en algún momento alguien cambia su consulta a la siguiente

    AND  datefield <=  '2012-01-01'

... esperando (y fallando) incluir el día completo "2012-01-01" en la consulta. Con la sintaxis posterior, la intención es más clara y se evita esta confusión.

Para que quede aún más claro (quizás demasiado detallado), puede hacer el lanzamiento explícito:

WHERE datefield >= '2010-01-01 00:00:00'::timestamp 
 AND  datefield <  '2012-01-01 00:00:00'::timestamp

No usaría to_date() aquí por razones similares (posible confusión de tipos de datos), ni to_timestamp() (devuelve un timestamptz ).

Por cierto, he modificado el caso para cumplir con la práctica recomendada (palabras clave en mayúsculas, identificadores en minúsculas)