Приведите значение timestamp
к date
, если вы хотите простой синтаксис.Например:
SELECT *
FROM tbl
WHERE timestamp_col::date = '2011-12-01'; -- date literal
Однако с большими таблицами это будет быстрее:
SELECT *
FROM tbl
WHERE timestamp_col >= '2011-12-01 0:0' -- timestamp literal
AND timestamp_col < '2011-12-02 0:0';
Причина: второй запрос не должен преобразовывать каждое значение в таблице и может использоватьпростой индекс в столбце метки времени.Выражение sargable .
Примечание исключает верхнюю границу (<
вместо <=
) для правильного выбора.
Вы можете восполнить это, создав индекс для выражения , например, так:
CREATE INDEX tbl_ts_date_idx ON tbl (cast(timestamp_col AS date));
Тогда первая версия запроса будет настолько быстрой, насколько это возможно.