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

Hvordan matcher jeg en hel dag med et dato-tidsfelt?

Cast dit timestamp værdi til date hvis du vil have simpel syntaks. Sådan:

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

Men med store borde vil dette være hurtigere:

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

Årsag:den anden forespørgsel behøver ikke at transformere hver enkelt værdi i tabellen og kan bruge et simpelt indeks på tidsstempelkolonnen. Udtrykket er sargerbart.

Note ekskluderede den øvre grænse (< i stedet for <= ) for et korrekt valg.
Du kan kompensere for det ved at oprette et indeks på et udtryk som dette:

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

Så vil den første version af forespørgslen være så hurtig, som den bliver.



  1. SQL Server Failover Cluster Installation -3

  2. Postgresql rekursiv selv joinforbindelse

  3. UNION-forespørgsel med kodetænderens aktive registreringsmønster

  4. Sådan finder du maksimale værdier i rækker