PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL - Filtrer une plage de dates

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)