Transmita seu
timestamp
valor para date
se você quiser uma sintaxe simples. Assim:SELECT *
FROM tbl
WHERE timestamp_col::date = '2011-12-01'; -- date literal
No entanto, com tabelas grandes, isso será mais rápido:
SELECT *
FROM tbl
WHERE timestamp_col >= '2011-12-01 0:0' -- timestamp literal
AND timestamp_col < '2011-12-02 0:0';
Motivo:a segunda consulta não precisa transformar todos os valores da tabela e pode utilizar um índice simples na coluna timestamp. A expressão é sargável.
A nota excluiu o limite superior (
<
em vez de <=
) para uma seleção correta.Você pode compensar isso criando um índice em uma expressão como esta:
CREATE INDEX tbl_ts_date_idx ON tbl (cast(timestamp_col AS date));
Em seguida, a primeira versão da consulta será o mais rápido possível.