sql >> Database >  >> RDS >> PostgreSQL

Hoe koppel ik een hele dag aan een datetime-veld?

Cast je timestamp waarde tot date als u een eenvoudige syntaxis wilt. Zoals dit:

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

Met grote tafels gaat dit echter sneller:

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

Reden:de tweede query hoeft niet elke afzonderlijke waarde in de tabel te transformeren en kan een eenvoudige index op de tijdstempelkolom gebruiken. De uitdrukking is sargable.

Opmerking sluit de bovengrens uit (< in plaats van <= ) voor een juiste selectie.
Dat kun je goedmaken door een index te maken op een uitdrukking als deze:

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

Dan zal de eerste versie van de query zo snel mogelijk zijn.



  1. Schakel waarschuwingen en fouten uit in PHP en MySQL

  2. Script volledige database SQL-Server

  3. Hoe MySQL te beveiligen:deel één

  4. Verschil tussen database en schema