U kunt date_trunc('week', ...)
.
Bijvoorbeeld:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00
Vervolgens kun je dit omzetten in een datum, als je niet geïnteresseerd bent in een starttijd.
Om ook de einddatum te krijgen:
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
(Ik heb hier de standaardopmaak gebruikt, je kunt dit natuurlijk aanpassen om MM/DD/YYYY te gebruiken.)
Merk op dat, als u vergelijkingen wilt maken op tijdstempels, in plaats van (date_trunc('week', ...) + '6 days'::interval
, wilt u misschien een hele week toevoegen en een strikte vergelijking gebruiken voor het einde van de week.
Dit sluit y
. uit tijdstempels op de laatste dag van de week (aangezien de sluitingstijd middernacht op de dag is).
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date
Dit omvat hen:
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)
(Dat is in de zeldzame gevallen waarin u date_trunc
niet kunt gebruiken op y
rechtstreeks.)
Als uw week op een zondag begint, vervangt u date_trunc('week', x)::date
met date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval
zou moeten werken.