Du kan bruge date_trunc('week', ...)
.
For eksempel:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00
Derefter kan du konvertere dette til en dato, hvis du ikke er interesseret i et starttidspunkt.
For også at få slutdatoen:
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
(Jeg har brugt standardformateringen her, du kan selvfølgelig tilpasse dette til at bruge MM/DD/ÅÅÅÅ.)
Bemærk, at hvis du vil foretage sammenligninger på tidsstempler, i stedet for at bruge (date_trunc('week', ...) + '6 days'::interval
, vil du måske tilføje en hel uge og bruge en streng sammenligning for slutningen af ugen.
Dette vil ekskludere y
tidsstempler på den sidste dag i ugen (da skæringstidspunktet er midnat på dagen).
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date
Dette vil inkludere dem:
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)
(Det er i de sjældne tilfælde, hvor du ikke kan bruge date_trunc
på y
direkte.)
Hvis din uge starter på en søndag, skal du erstatte date_trunc('week', x)::date
med date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval
burde virke.