Diffusez votre timestamp
valeur à date
si vous voulez une syntaxe simple. Comme ceci :
SELECT *
FROM tbl
WHERE timestamp_col::date = '2011-12-01'; -- date literal
Cependant, avec de grandes tables, ce sera plus rapide :
SELECT *
FROM tbl
WHERE timestamp_col >= '2011-12-01 0:0' -- timestamp literal
AND timestamp_col < '2011-12-02 0:0';
Raison :la deuxième requête n'a pas à transformer chaque valeur de la table et peut utiliser un simple index sur la colonne d'horodatage. L'expression est sargable.
Remarque exclu la limite supérieure (<
au lieu de <=
) pour une sélection correcte.
Vous pouvez compenser cela en créant un index sur une expression comme celle-ci :
CREATE INDEX tbl_ts_date_idx ON tbl (cast(timestamp_col AS date));
Ensuite, la première version de la requête sera aussi rapide que possible.