Prześlij swój timestamp
wartość do date
jeśli chcesz prostej składni. Tak:
SELECT *
FROM tbl
WHERE timestamp_col::date = '2011-12-01'; -- date literal
Jednak przy dużych stołach będzie to szybsze:
SELECT *
FROM tbl
WHERE timestamp_col >= '2011-12-01 0:0' -- timestamp literal
AND timestamp_col < '2011-12-02 0:0';
Powód:drugie zapytanie nie musi przekształcać każdej wartości w tabeli i może wykorzystywać prosty indeks w kolumnie sygnatury czasowej. Wyrażenie jest sargable.
Uwaga wykluczyła górną granicę (<
zamiast <=
) dla prawidłowego wyboru.
Możesz to nadrobić, tworząc indeks wyrażenia takiego jak to:
CREATE INDEX tbl_ts_date_idx ON tbl (cast(timestamp_col AS date));
Wtedy pierwsza wersja zapytania będzie tak szybka, jak to tylko możliwe.