Votre solution est bonne. Si les dates sont littérales, je préférerais cependant :
WHERE datefield >= '2010-01-01 00:00:00'
AND datefield < '2012-01-01 00:00:00'
Cela fonctionne exactement de la même manière, mais est plus maintenable, car cela indique clairement que chaque "date" littérale est un horodatage et non une date. Par exemple, supposons que quelqu'un modifie votre requête en ce qui suit
AND datefield <= '2012-01-01'
... s'attendant (et échouant) à inclure la journée complète "2012-01-01" dans la requête. Avec la syntaxe ultérieure, l'intention est plus claire et cette confusion est évitée.
Pour le rendre encore plus clair (peut-être trop verbeux), vous pouvez faire le cast explicite :
WHERE datefield >= '2010-01-01 00:00:00'::timestamp
AND datefield < '2012-01-01 00:00:00'::timestamp
Je n'utiliserais pas to_date()
ici pour des raisons similaires (confusion potentielle de type de données), ni to_timestamp()
(il renvoie un timestamptz
).
BTW, j'ai modifié la casse pour respecter la pratique recommandée (mots clés en majuscules, identifiants en minuscules)