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

Como faço para corresponder um dia inteiro a um campo de data e hora?


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.