Puoi utilizzare date_trunc('week', ...)
.
Ad esempio:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00
Quindi, puoi convertirlo in una data, se non sei interessato a un'ora di inizio.
Per avere anche la data di fine:
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
(Ho usato la formattazione predefinita qui, ovviamente puoi adattarla per usare MM/GG/AAAA.)
Nota che, se vuoi fare confronti sui timestamp, invece di usare (date_trunc('week', ...) + '6 days'::interval
, potresti voler aggiungere un'intera settimana e utilizzare un confronto rigoroso per la fine della settimana.
Questo escluderà y
timestamp dell'ultimo giorno della settimana (poiché l'orario limite è la mezzanotte del giorno).
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date
Questo li includerà:
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)
(Questo è nei rari casi in cui non puoi usare date_trunc
su y
direttamente.)
Se la tua settimana inizia di domenica, sostituisci date_trunc('week', x)::date
con date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval
dovrebbe funzionare.