Sie können date_trunc('week', ...)
.
Zum Beispiel:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00
Dann können Sie dies in ein Datum umwandeln, wenn Sie nicht an einer Startzeit interessiert sind.
So erhalten Sie auch das Enddatum:
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
(Ich habe hier die Standardformatierung verwendet, Sie können diese natürlich anpassen, um MM/TT/JJJJ zu verwenden.)
Beachten Sie, dass Sie, wenn Sie Zeitstempel vergleichen möchten, anstatt (date_trunc('week', ...) + '6 days'::interval
zu verwenden , möchten Sie vielleicht eine ganze Woche hinzufügen und einen strengen Vergleich für das Ende der Woche verwenden.
Dadurch wird y
ausgeschlossen Zeitstempel am letzten Tag der Woche (da die Annahmeschlusszeit Mitternacht des Tages ist).
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date
Dies schließt sie ein:
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)
(Das ist in den seltenen Fällen, in denen Sie date_trunc
nicht verwenden können auf y
direkt.)
Wenn Ihre Woche an einem Sonntag beginnt, ersetzen Sie date_trunc('week', x)::date
mit date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval
sollte funktionieren.