Bạn có thể sử dụng date_trunc('week', ...)
.
Ví dụ:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00
Sau đó, bạn có thể chuyển ngày này thành ngày, nếu bạn không quan tâm đến thời gian bắt đầu.
Để biết cả ngày kết thúc:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp)::date
|| ' '
|| (date_trunc('week', '2012-07-25 22:24:22'::timestamp)+ '6 days'::interval)::date;
-> 2012-07-23 2012-07-29
(Tôi đã sử dụng định dạng mặc định ở đây, tất nhiên bạn có thể điều chỉnh định dạng này để sử dụng MM / DD / YYYY.)
Lưu ý rằng, nếu bạn muốn so sánh trên dấu thời gian, thay vì sử dụng (date_trunc('week', ...) + '6 days'::interval
, bạn có thể muốn thêm cả tuần và sử dụng so sánh chặt chẽ cho cuối tuần.
Điều này sẽ loại trừ y
dấu thời gian vào ngày cuối cùng trong tuần (vì thời gian giới hạn là nửa đêm trong ngày).
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date
Điều này sẽ bao gồm chúng:
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)
(Đó là trong một số trường hợp hiếm hoi khi bạn không thể sử dụng date_trunc
trên y
trực tiếp.)
Nếu tuần của bạn bắt đầu vào Chủ nhật, hãy thay thế date_trunc('week', x)::date
với date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval
sẽ hoạt động.