PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come faccio ad abbinare un giorno intero a un campo datetime?

Trasmetti il ​​tuo timestamp valore a date se vuoi una sintassi semplice. In questo modo:

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

Tuttavia, con tavoli grandi questo sarà più veloce:

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

Motivo:la seconda query non deve trasformare ogni singolo valore nella tabella e può utilizzare un semplice indice nella colonna timestamp. L'espressione è sargable.

Nota escluso il limite superiore (< invece di <= ) per una selezione corretta.
Puoi rimediare creando un indice su un'espressione come questa:

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

Quindi la prima versione della query sarà la più veloce possibile.