Du kan använda date_trunc('week', ...)
.
Till exempel:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00
Sedan kan du konvertera detta till ett datum om du inte är intresserad av en starttid.
För att få slutdatum också:
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
(Jag har använt standardformateringen här, du kan naturligtvis anpassa detta för att använda MM/DD/ÅÅÅÅ.)
Observera att om du vill göra jämförelser på tidsstämplar, istället för att använda (date_trunc('week', ...) + '6 days'::interval
, du kanske vill lägga till en hel vecka och använda en strikt jämförelse för slutet av veckan.
Detta exkluderar y
tidsstämplar den sista dagen i veckan (eftersom bryttiden är midnatt på dagen).
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date
Detta kommer att inkludera dem:
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)
(Det är i de sällsynta fall då du inte kan använda date_trunc
på y
direkt.)
Om din vecka börjar på en söndag, ersätter du date_trunc('week', x)::date
med date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval
borde fungera.