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.