Можете да използвате date_trunc('week', ...)
.
Например:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00
След това можете да конвертирате това в дата, ако не се интересувате от начален час.
За да получите и крайната дата:
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
(Използвах форматирането по подразбиране тук, можете, разбира се, да адаптирате това, за да използвате ММ/ДД/ГГГГ.)
Имайте предвид, че ако искате да правите сравнения на клеймото за време, вместо да използвате (date_trunc('week', ...) + '6 days'::interval
, може да искате да добавите цяла седмица и да използвате строго сравнение за края на седмицата.
Това ще изключи y
времеви клейма в последния ден от седмицата (тъй като крайният час е полунощ на деня).
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date
Това ще ги включва:
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)
(Това е в редките случаи, когато не можете да използвате date_trunc
на y
директно.)
Ако седмицата ви започва в неделя, замествайки date_trunc('week', x)::date
с date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval
трябва да работи.