PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL- Filtre um intervalo de datas


Sua solução está bem. Se as datas forem literais, eu preferiria:
WHERE datefield >= '2010-01-01 00:00:00' 
 AND  datefield <  '2012-01-01 00:00:00'

Isso funciona exatamente da mesma forma, mas é mais fácil de manter, porque deixa claro o ponto de cada "data" literal ser um carimbo de data/hora, não uma data. Por exemplo, suponha que alguém altere sua consulta para o seguinte
    AND  datefield <=  '2012-01-01'

... esperando (e não) incluir o dia inteiro "2012-01-01" na consulta. Com a sintaxe posterior, a intenção é mais clara e essa confusão é evitada.

Para deixar ainda mais claro (talvez muito detalhado), você pode fazer o cast explícito:
WHERE datefield >= '2010-01-01 00:00:00'::timestamp 
 AND  datefield <  '2012-01-01 00:00:00'::timestamp

Eu não usaria to_date() aqui por motivos semelhantes (potencial confusão de tipos de dados), nem to_timestamp() (retorna um timestamptz ).

BTW, modifiquei o caso para cumprir a prática recomendada (palavras-chave em maiúsculas, identificadores em minúsculas)