sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo hago coincidir un día completo con un campo de fecha y hora?

Envía tu timestamp valor hasta date si quieres una sintaxis simple. Así:

SELECT *
FROM   tbl
WHERE  timestamp_col::date = '2011-12-01';  -- date literal

Sin embargo, con tablas grandes esto será más rápido:

SELECT *
FROM   tbl
WHERE  timestamp_col >= '2011-12-01 0:0'    -- timestamp literal
AND    timestamp_col <  '2011-12-02 0:0';

Motivo:la segunda consulta no tiene que transformar todos los valores de la tabla y puede utilizar un índice simple en la columna de marca de tiempo. La expresión es sargable.

Tenga en cuenta que excluyó el límite superior (< en lugar de <= ) para una selección correcta.
Puede compensar eso creando un índice en una expresión como esta:

CREATE INDEX tbl_ts_date_idx ON tbl (cast(timestamp_col AS date));

Luego, la primera versión de la consulta será lo más rápida posible.