Truyền timestamp
của bạn giá trị thành date
nếu bạn muốn cú pháp đơn giản. Như thế này:
SELECT *
FROM tbl
WHERE timestamp_col::date = '2011-12-01'; -- date literal
Tuy nhiên, với các bảng lớn, việc này sẽ nhanh hơn:
SELECT *
FROM tbl
WHERE timestamp_col >= '2011-12-01 0:0' -- timestamp literal
AND timestamp_col < '2011-12-02 0:0';
Lý do:truy vấn thứ hai không phải chuyển đổi mọi giá trị đơn lẻ trong bảng và có thể sử dụng một chỉ mục đơn giản trên cột dấu thời gian. Biểu thức là sargable.
Lưu ý đã loại trừ giới hạn trên (<
thay vì <=
) để có lựa chọn chính xác.
Bạn có thể bù đắp điều đó bằng cách tạo chỉ mục trên một biểu thức như sau:
CREATE INDEX tbl_ts_date_idx ON tbl (cast(timestamp_col AS date));
Sau đó, phiên bản đầu tiên của truy vấn sẽ nhanh như cũ.