sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur matchar jag en hel dag med ett datum och tid?

Casta din timestamp värde till date om du vill ha enkel syntax. Så här:

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

Men med stora bord kommer detta att gå snabbare:

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

Anledning:den andra frågan behöver inte transformera varje enskilt värde i tabellen och kan använda ett enkelt index i tidsstämpelkolumnen. Uttrycket är sargbart.

Note exkluderade den övre gränsen (< istället för <= ) för ett korrekt urval.
Du kan kompensera för det genom att skapa ett index på ett uttryck så här:

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

Då kommer den första versionen av frågan vara så snabb som den blir.



  1. MySQL pivotrad till dynamiskt antal kolumner

  2. Hur RAND() fungerar i MariaDB

  3. kan inte ladda oci8 -> Allvarligt fel:Anrop till odefinierad funktion oci_connect()

  4. Hur man får data för varje timme i MySQL